728x90
윈도우에서 MSG_OOB 관찰 방법
- 시그널 핸들링은 linux 계열에서 사용하는 방법이기 때문에 windows에서는 사용 불가
- 윈도우에서는 MSG_OOB 메시지 처리를 위해 select 함수를 사용
- select 함수에서 예외 발생에서 처리
int main(int argc, char *argv[])
{
WSADATA wsaData;
SOCKET hAcptSock, hRecvSock;
fd_set read, except, readCopy, exceptCopy;
struct timeval timeout;
if(WSAStartup(MAKEWORD(2, 2), &wsaData)!=0)
ErrorHandling("WSAStartup() error!");
hAcptSock=socket(PF_INET, SOCK_STREAM, 0);
...;
FD_ZERO(&read);
FD_ZERO(&except);
FD_SET(hRecvSock, &read);
FD_SET(hRecvSock, &except);
while(1)
{
readCopy=read;
exceptCopy=except;
timeout.tv_sec=5;
timeout.tv_usec=0;
result=select(0, &readCopy, 0, &exceptCopy, &timeout);
if(result>0)
{
if(FD_ISSET(hRecvSock, &exceptCopy))
{
strLen=recv(hRecvSock, buf, BUF_SIZE-1, MSG_OOB);
buf[strLen]=0;
printf("Urgent message: %s \n", buf);
} // 긴급 메시지
if(FD_ISSET(hRecvSock, &readCopy))
{
strLen=recv(hRecvSock, buf, BUF_SIZE-1, 0);
if(strLen==0)
{
break;
closesocket(hRecvSock);
}
else
{
buf[strLen]=0;
puts(buf);
}
} // 일반 메시지
}
}
closesocket(hAcptSock);
WSACleanup();
return 0;
}
728x90
'Programming > Network' 카테고리의 다른 글
열혈 TCP/IP 14-2. 브로드캐스트(Broadcast) (0) | 2021.03.14 |
---|---|
열혈 TCP/IP 14-1. 멀티캐스트(Multicast) (0) | 2021.03.14 |
열혈 TCP/IP 13-2. readv & writev 입출력 함수 (0) | 2021.03.14 |
열혈 TCP/IP 13-1. send & recv 입출력 함수 (0) | 2021.03.14 |
열혈 TCP/IP 12-2. select 함수의 이해와 서버의 구현 (0) | 2021.03.08 |