求助关于socket的问题

雲哉 2011-12-02 11:07:22

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;


麻烦帮我把语句的作用解释一下,谢谢 例如设置非阻塞模式,FD_SET神马的~PPT要用
...全文
102 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gloveing 2011-12-02
  • 打赏
  • 举报
回复
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;
}

UM_SOCK 是注册的消息,自己去写消息处理函数
雲哉 2011-12-02
  • 打赏
  • 举报
回复
算了 我自己弄懂了= =、
lancerEx 2011-12-02
  • 打赏
  • 举报
回复
参考《unix网络编程Vol1》

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧