|
왕초보 님이 쓰신 글 :
: 소켓통신을 하는데 해당 Ip가 없거나 잘못설정이 되 있을때 Connect를 하는데 1개당 20초 정도 걸립니다.
: Connect 하는데 시간을 설정할수 있나요? 1초정도 연결이 안되면 강제적으로 다음으로 넘어가게
: 할려고 하거든요.
:
: 어느 소스를 보니까 WSAAsyncSelect를 이용한것이 있어서 아래처럼 해보니까 IP가 잘못되어 있어도
: 무조건 Connect 된것으로 표시가 됩니다.
: 아시는분 자세하게 부탁드립니다.
:
: cli[n]는 stClient 구조체의 객체입니다. [n = 0 ~ 99]
: int cSockUtil::connect_sock(char *szipaddr, int nport, int n) // nport는 소켓포트
: {
: int nret;
: char m_szDebugBuf[1024];
:
: cli[n].cli_sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
: cli[n].cli_addr.sin_family = AF_INET;
: cli[n].cli_addr.sin_addr.s_addr = inet_addr(szipaddr);
: cli[n].cli_addr.sin_port = htons(nport);
:
: nret = WSAAsyncSelect(cli[n].cli_sock, frmMain->Handle, NULL, FD_CONNECT);
: if(nret == SOCKET_ERROR)
: return -1;
:
: if((nret = connect(cli[n].cli_sock, (LPSOCKADDR)&cli[n].cli_addr, sizeof(cli[n].cli_addr))) ==
: SOCKET_ERROR )
: {
: if((nret = WSAGetLastError()) == WSAEWOULDBLOCK)
: {
: sprintf(m_szDebugBuf, "Connection From: %s", inet_ntoa(cli[n].cli_addr.sin_addr));
: ShowMessage(m_szDebugBuf);
: }
: else
: return -1;
: }
:
: return cli[n].cli_sock;
: }
연결하기 전에 아래 두 함수 중 하나로 확인하는 게 속도면에서 빠를 것입니다.
struct hostent FAR * gethostbyname ( const char FAR * name );
struct hostent FAR * gethostbyaddr ( const char FAR * addr, int len, int type );
|