리셋 되지 말자

[window] 윈도우 기반 소켓관련 함수 및 예제 본문

socket

[window] 윈도우 기반 소켓관련 함수 및 예제

kyeongjun-dev 2020. 4. 3. 18:33

socket

#include<winsock2.h>

SOCKET socket(int af, int type, int protocol);
//성공 시 소켓 핸들, 실패 시 INVALID_SOCKET 반환

 

리눅스의 bind와 같은 역할

#include<winsock2.h>

int bind(SOCKET s, const struct sockaddr* name, int namelen);
//성공 시 0, 실패 시 SOCKET_ERROR 반환

 

리눅스의 listen와 같은 역할

#include<winsock2.h>

int listen(SOCKET s, int backlog);
//성공 시 0, 실패 시 SOCKET_ERROR 반환

 

리눅스의 accept와 같은 역할

#include<winsock2.h>

SOCKET accept(SOCKET s, struct sockaddr* addr, int* addrlen);
//성공 시 소켓 핸들, 실패 시 INVALID_SOCKET 반환

 

리눅스의 connect와 같은 역할

#include<winsock2.h>

int connect(SOCKET s, const struct sockaddr* name, int namelen);
//성공 시 0, 실패 시 SOCKET_ERROR 반환

 

리눅스의 close(리눅스에서는 소켓이던 파일이던 close로 동일하지만, 윈도우에서는 소켓을 닫을 때 호출하는 함수가 별도로 마련되어 있음)

#include<winsock2.h>

int closesocket(SOCKET s);
//성공 시 0, 실패 시 SOCKET_ERROR 반환

 

리눅스에서의 write 함수 역할을 수행함. 리눅스는 소켓도 파일로 간주하기 때문에 파일 입출력함수인 read write를 이용해서 데이터를 송수신 할 수 있었지만 윈도우는 다르다.

리눅스의 write함수와이 차이점은 마지막 매개변수인 flags 가 있냐 없느냐의 차이다

#include<winsock2.h>
int send(SOCKET s, const char* buf, int len, int flags);
//성공 시 전송된 바이트 수, 실패 시 SOCKET_ERROR 반환
// s : 데이터 전송 대상과의 연결을 의미하는 소켓의 핸들 값 전달
// buf : 전송할 데이터를 저장하고 있는 버퍼의 주소 값 전달
// len : 전송할 바이트 수 전달
// flags : 데이터 전송 시 적용할 다양한 옵션 정보 전달. 0이면 아무런 옵션을 설정 안한다

 

리눅스의 write함수의 역할을 한다.

#include<winsock2.h>

int recv(SOCKET s, const char* buf, int len, int flags);
//성공 시 수신한 바이트 수(단 EOF 전송시 0), 실패 시 SOCKET_ERROR 반환
// s : 데이터 수신 대상과의 연결을 의미하는 소켓의 핸들 값 전달
// buf : 수신된 데이터를 저장할 버퍼의 주소 값 전달
// len : 수신할 수 있는 최대 바이트 수 전달
// flags : 데이터 수신 시 적용할 다양한 옵션 정보 전달

 

※ 리눅스에도 send, recv함수가 따로 존재한다. 즉, 리눅스의 read, write 함수가 윈도우의 send, recv 함수에 대응한다고 생각하면 안된다. 역할만 같을 뿐임을 상기해야 한다.

 

---여기까지 2020 - 4 - 6 학습 (Chapter 1 끝)

Comments