C/TCPIP 소켓 프로그래밍(윤성우 저)

TCP/IP 소켓 프로그래밍 6~9장 함수 복습

꾸준함. 2017. 7. 8. 17:00

[리눅스 UDP 데이터 송신함수]

#include <sys/socket.h>

ssize_t sendto(int sock, void *buff, size_t nbytes, int flags, struct sockaddr *to, socklen_t addrlen);


*sock:데이터 전송에 사용될 UDP 소켓의 파일 디스크립터를 인자로 전달

*buff:전송할 데이터를 저장하고 있는 버퍼의 주소 값 전달

*nbytes:전송할 데이터 크기를 바이트 단위로 전달

*flags:목적지 주소정보를 담고 있는 sockaddr 구조체 변수의 주소 값 전달

*to:목적지 주소정보를 담고 있는 sockaddr 구조체 변수의 주소 값 전달

*addrlen:매개변수 to로 전달된 주소 값의 구조체 변수 크기 전달


[리눅스 UDP 데이터 수신함수]

#include <sys/socket.h>

ssize_t recvfrom(int sock, void *buff, size_t nbytes, int flagggs, struct sockaddr *from, socklen_t *addrlen);


*sock:데이터 수신에 사용될 UDP 소켓의 파일 디스크립터르 인자로 전달

*buff:데이터 수신에 사용될 버퍼의 주소 값 전달

*nbytes:수신할 최대 바이트 수 전달, 때문에 매개변수 buff가 가리키는 버퍼의 크기를 넘을 수 없다

*flags:옵션 지정에 사용되는 매개변수, 지정할 옵션이 없다면 0 전달

*from:발신지 정보를 채워 넣을 sockaddr 구조체 변수의 주소 값 전달

*addrlen:매개변수 from으로 전달된 주소에 해당하는 구조체 변수의 크기정보를 담고 있는 변수의 주소값 전달


[윈도우 UDP 데이터 송신함수]

#include <winsock2.h>

int sendto(SOCKET s, const char *buf, int len, int flags, const struct sockaddr* to, int tolen);


*s:데이터 전송에 사용될 UDP 소켓의 파일 디스크립터를 인자로 전달

*buf:전송할 데이터를 저장하고 있는 버퍼의 주소 값 전달

*len:전송할 데이터 크기를 바이트 단위로 전달

*flags:목적지 주소정보를 담고 있는 sockaddr 구조체 변수의 주소 값 전달

*to:목적지 주소정보를 담고 있는 sockaddr 구조체 변수의 주소 값 전달

*tolen:매개변수 to로 전달된 주소 값의 구조체 변수 크기 전달


[윈도우 UDP 데이터 수신함수]

#include <winsock2.h>

int recvfrom(SOCKET s, char *buf, int len, int flags, struct sockaddr *from, int *fromlen);


*s:데이터 수신에 사용될 UDP 소켓의 파일 디스크립터르 인자로 전달

*buf:데이터 수신에 사용될 버퍼의 주소 값 전달

*len:수신할 최대 바이트 수 전달, 때문에 매개변수 buff가 가리키는 버퍼의 크기를 넘을 수 없다

*flags:옵션 지정에 사용되는 매개변수, 지정할 옵션이 없다면 0 전달

*from:발신지 정보를 채워 넣을 sockaddr 구조체 변수의 주소 값 전달

*fromlen:매개변수 from으로 전달된 주소에 해당하는 구조체 변수의 크기정보를 담고 있는 변수의 주소값 전달


[리눅스 스트림의 일부 종료(half-close) 함수]

#include <sys/socket.h>

int shutdown(int sock, int howto);

->성공 시 0, 실패 시 -1 반환


*sock:종료할 소켓의 파일 디스크립터 전달

*howto:종료방법에 대한 정보 전달


[윈도우 스트림의 일부 종료(half-close) 함수]

#include <winsock2.h>


int shutdown(SOCKET sock, int howto);

->성공 시 0, 실패 시 -1 반환


*sock:종료할 소켓의 핸들

*howto:종료방법에 대한 정보 전달


[리눅스 IP 주소정보 얻어오는 함수]

#include <netdb.h>

struct hostent *gethostbyname(const char *hostname);

->성공 시 hostent 구조체 변수의 주소 값, 실패 시 NULL 포인터 반환


struct hostent

{

        char *h_name; //official name

        char **h_aliases; //alias list

        int h_addrtype; //host address type

        int h_length; //address length

        char **h_addr_list; //address list

};


[리눅스 도메인 정보 얻어오는 함수]

#include <netdb.h>

struct hostent *gethostbyaddr(const char *addr, socklen_t len, int family);


*addr:IP주소를 지니는 in_addr 구조체 변수의 포인터 전달, IPv4 이외의 다양한 정보를 전달받을 수 있도록 일반화하기 위해서 매개변수를 char형 포인터로 선언

*len:첫 번째 인자로 전달된 주소정보의 길이, IPv4의 경우 4, IPv6의 경우 16 전달

*family:주소체계 정보 전달. IPv4의 경우 AF_INET, IPv6의 경우 AF_INET6 전달


[윈도우 IP 주소정보 얻어오는 함수]

#include <winsock2.h>

struct hostent *gethostbyname(const char *name);

->성공 시 hostent 구조체 변수의 주소 값, 실패 시 NULL 포인터 반환


[윈도우 도메인 정보 얻어오는 함수]

#include <winsock2.h>


struct hostent *gethostbyaddr(const char *addr, int len, int type);


*addr:IP주소를 지니는 in_addr 구조체 변수의 포인터 전달, IPv4 이외의 다양한 정보를 전달받을 수 있도록 일반화하기 위해서 매개변수를 char형 포인터로 선언

*len:첫 번째 인자로 전달된 주소정보의 길이, IPv4의 경우 4, IPv6의 경우 16 전달

*type:주소체계 정보 전달. IPv4의 경우 AF_INET, IPv6의 경우 AF_INET6 전달


[리눅스 설정상태의 참조 함수]

#include <sys/socket.h>

int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen);

->성공 시 0, 실패 시 -1 반환


*sock:옵션확인을 위한 소켓의 파일 디스크립터 전달

*level:확인할 옵션의 프로토콜 레벨 전달

*optname:확인할 옵션의 이름 전달

*optval:확인결과의 저장을 위한 버퍼의 주소 값 전달

*optlen:네 번째 매개변수 optval로 전달된 주소 값의 버퍼크기를 담고 있는 변수의 주소 값 전달, 함수호출이 완료되면 이 변수에는 네 번째 인자를 통해 반환된 옵션정보의 크기가 바이트 단위로 계산되어 저장된다.


[리눅스 설정상태 변경 함수]

#include <sys/socket.h>

int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen);

->성공 시 0, 실패 시 -1 반환


*sock:옵션변경을 위한 소켓의 파일 디스크립터 전달

*level:변경할 옵션의 프로토콜 레벨 전달

*optname:변경할 옵션의 이름 전달

*optval:변경할 옵션정보를 저장한 버퍼의 주소 값 전달

*optlen:네 번째 매개변수 optval로 전달된 옵션정보의 바이트 단위 크기 전달


[윈도우 설정상태의 참조 함수]

#include <winsock2.h>

int getsockopt(SOCKET sock, int level, int optname, char *optval, int *optlen);


*sock:옵션확인을 위한 소켓의 핸들 전달

*level:확인할 옵션의 프로토콜 레벨 전달

*optname:확인할 옵션의 이름 전달

*optval:확인결과의 저장을 위한 버퍼의 주소 값 전달

*optlen:네 번째 매개변수 optval로 전달된 주소 값의 버퍼크기를 담고 있는 변수의 주소 값 전달, 함수호출이 완료되면 이 변수에는 네 번째 인자를 통해 반환된 옵션정보의 크기가 바이트 단위로 계산되어 저장된다.


[윈도우 설정상태 변경 함수]

#include <winsock2.h>

int setsockopt(SOCKET sock, int level, int optname, const char *optval, int optlen);



*sock:옵션변경을 위한 소켓의 핸들 전달

*level:변경할 옵션의 프로토콜 레벨 전달

*optname:변경할 옵션의 이름 전달

*optval:변경할 옵션정보를 저장한 버퍼의 주소 값 전달

*optlen:네 번째 매개변수 optval로 전달된 옵션정보의 바이트 단위 크기 전달


[참고] TCP/IP 소켓프로그래밍 윤성우 저

반응형