프로그래밍의 기초/TCP | IP

윈도우 기반 socket 관련 함수

Kim나현 2022. 1. 6. 11:05
반응형
  • 윈도우에서는 socket 생성 시 반환되는 handle 정수형을 typedef를 통해 SOCKET으로 재정의

SOCKET socket(int af, int type, int protocol);

→ 성공 시 socket handle, 실패 시 INVALIDE_SOCKET 반환

 

int bind(SOCKET s, const struct sockaddr *naem, int namelen);

→ 성공 시 0, 실패 시 SOCKET_ERROR 반환

 

int listen(SOCKET s, int backlog)

→ 성공 시 0, 실패 시 SOCKET_ERROR 반환

 

SOCKET accept(SOCKET s, struct sockaddr* addr, int *addrlen);

→ 성공 시 socket handle, 실패 시 INVALIDE_SOCKET 반환

 

int connect(SOCKET s, const struct sockaddr* name, int namelen);

→ 성공 시 0, 실패 시 SOCKET_ERROR 반환

 

int colsesocket(SOCKET s);

→ 성공 시 socket handle, 실패 시 INVALIDE_SOCKET 반환

 

window에서는 시스템 함수를 통해 파일이나 socket을 생성할 때 handle을 반환

(file handle, socket handle의 함수에는 차이가 있음)

 

  • 윈도우 소켓 기반 데이터 입출력 함수

int send(SOCKET s, const char* buf, int len, int flags);

→ 성공 시 전송된 바이트 수, 실패 시 SOCKET_ERROR 반환

 

int recv(SOCKET s, const char* buf, int len, int flags);

→ 성공 시 수신한 바이트 수, 실패 시 SOCKET_ERROR 반환, EOF에서 0 반환


네트워크 통신 표준: 네트워크 통신의 호스트에 따라 바이트 정렬이 달라질 수 있으므로 네트워크 바이트 정렬로 표준을 정하였고 bigendian 방식을 사용한다.

  • 네트워크 바이트 정렬 ↔ 호스트 바이트 정렬
//호스트 바이트 정렬 방식의 4바이트 데이터를 네트워크 바이트 정렬 방식으로 변환
u_long htonl(u_long hostlong); 
//호스트 바이트 정렬 방식의 2바이트 데이터를 네트워크 바이트 정렬 방식으로 변환
u_short htons(u_short hostshort);
//네트워크 바이트 정렬 방식의 4바이트 데이터를 호스트 바이트 정렬 방식으로 변환
u_long ntohl(u_long netlong);
//네트워크 바이트 정렬 방식의 2바이트 데이터를 호스트 바이트 정렬 방식으로 변환
u_short ntohs(u_short netshort);
반응형