티스토리 뷰

반응형

#include <winsock2.h>

#include <process.h>

 

#define SERVER_PORT     9080

 

char __fastcall TMainFrm::InitSocket(void)

{

    WSADATA wsaData;

    SOCKET  servSock;

    SOCKET  clntSock;

 

    SOCKADDR_IN servAddr;

    SOCKADDR_IN clntAddr;

    int clntAddrSize;

 

    if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)   {

        MsgBox("WSAStartup() Error");

        return  FALSE;

    }

 

    //  TCP소켓

    servSock = socket(PF_INET, SOCK_STREAM, 0);

    if(servSock == INVALID_SOCKET)  {

      MsgBox("socket() Error");

      return  FALSE;

    }

 

    // 서버 소켓이 종료 되었을때 TIME_WAIT상태가 되어 서버 소켓을 재 실행하면 bind Error가 난다.

    // TIME_WAIT상태를 거치치 않도록 하는 옵션이다.

    int   option = TRUE;

    setsockopt(servSock,  SOL_SOCKET, SO_REUSEADDR, (char *)&option, sizeof(option));

  

    //  타임 아웃 설정

    // struct    timeval tv_timeo = { 3, 500000 };  /* 3.5 second */

 

    //  if(setsockopt(servSock, SOL_SOCKET, SO_RCVTIMEO, &tv_timeo, sizeof( tv_timeo )) == -1)  {  MsgBox("rcvTimeout() Error");  return  FALSE;  }

    //  if(setsockopt(servSock, SOL_SOCKET, SO_SNDTIMEO, &tv_timeo, sizeof( tv_timeo )) == -1)  {  MsgBox("sndTimeout() Error");  return  FALSE;  }

  

    memset(&servAddr, 0, sizeof(servAddr));

    servAddr.sin_family       = AF_INET;

    servAddr.sin_addr.s_addr  = htonl(INADDR_ANY);

    servAddr.sin_port         = htons(SERVER_PORT);

  

    if(bind(servSock, (struct sockaddr*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) {

      MsgBox("bind() Error");

      return FALSE; 

    }

 

    if(listen(servSock, 50) == SOCKET_ERROR) {

      MsgBox("listen() Error");

      return FALSE;

    }

 

 

    return  TRUE;

}

 

반응형
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday