69,382
社区成员
发帖
与我相关
我的任务
分享
int sock;
struct sockaddr_in addr;
fd_set rfds;
struct timeval timeout;
uint32 cmd;
int rcv_val;
uchar buf[PRB_BUF_LEN];
int err;
err = PRB_FAIL;
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
goto err_exit;
}
addr.sin_family = AF_INET;
addr.sin_port = port;
addr.sin_addr = ip;
memset(addr.sin_zero, 0x00, sizeof(char));
if (connect(sock, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) < 0) {
goto normal_exit;
}
cmd = IO_NONBLOCKING;
/* set mode to nonblocking */
if (ioctl(sock, FIONBIO, (uint32)&cmd) < 0) {
goto normal_exit;
}
if (send(sock, hello_msg, sizeof(hello_msg), 0) < 0) {
goto normal_exit;
}
FD_ZERO(&rfds);
FD_SET(sock, &rfds);
timeout.tv_sec = PRB_RECV_TIMEOUT;
timeout.tv_usec = 0;
/* wait for data before timeout */
if (select(sock + 1, &rfds, NULL, NULL, &timeout) <= 0) {
goto normal_exit;
}
/* whether the fd set contains this socket */
if (!FD_ISSET(sock, &rfds)) {
goto normal_exit;
}
if ((rcv_val = recv(sock, buf, PRB_BUF_LEN, 0)) < 0) {
goto normal_exit;
}
/* determine whether the response packet is an eMule hello response */
if (rcv_val > 0 && buf[0] == EMU_HELLO_RSP) {
err = PRB_OK;
}
normal_exit:
(void)close(sock);
err_exit:
return err;
BOOL CMyDlg::InitSocket()
{
m_socket=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,0);
if(INVALID_SOCKET==m_socket)
{
MessageBox("创建套接字失败!");
return FALSE;
}
SOCKADDR_IN addrSock;
addrSock.sin_addr.S_un.S_addr=htonl(ADDR_ANY);
addrSock.sin_family=AF_INET;
addrSock.sin_port=htons(6000);
if( SOCKET_ERROR==bind(m_socket,(SOCKADDR *)&addrSock,sizeof(SOCKADDR)) )
{
MessageBox("绑定失败 !");
return FALSE;
}
if( SOCKET_ERROR== WSAAsyncSelect(m_socket,m_hWnd,UM_SOCK,FD_READ) )
{
MessageBox("注册网络消息失败!");
return FALSE;
}
return TRUE;
}