int sock=socket(AF_INETN,SOCK_STREAM,0);
sockaddr_in si;
si.sin_family=AF_INET,
si.sin_port=htons(1234),
si.sin_addr.s_addr=inet_addr("127.0.0.1")
bind(sock,(sockaddr*)&si,sizeof(si));
listen(sock,2);
while((fd=accept(sock,&si,0))>0){
...
}我这样写的一个很简单的服务器程序:
这里,accept的第三个参数指定为NULL。发现accept根本没有阻塞,直接返回了。strerr(errno)是Bad Address这是为什么? 是不是accept第三个参数,这个指针必须是结构体大小的指针,像这样:
sin_size = sizeof(struct sockaddr_in);
new_fd = accept(sockfd, &their_addr, &sin_size); 可不可以指定为其他的数字? 可以是NULL吗?
为什么报错是Bad Address?
谢谢。
解决方案 »
- ReadFile 串口 有点诡异
- 关于NMHDR、pNMListView结构的疑问,《vc++技术内幕(第四版)》
- 如何把dll里面的函数导出??
- 用socket实现两台电脑间的数据库传输的问题
- 怎么避免这种现象?有关消息
- 怎么把动态连接变为静态连接
- 想编写一个auto acd下通过qq聊天的程序(即隐藏qq只在auto cad的命令状态栏输入和接收聊天内容),听听大家有什么好建议。
- 如何将系统的光标的闪烁频率调整到最快
- 如何在运行时在窗体上将一个Edit控件置为无效?
- 如何直接将多位小数位的double型数据变为只有两个小数位??
- VC如何使用CSocket实现等比例字节传输文件?
- 虚拟列表连接数据库的问题
先看看bind返回值和err
if(INVALID_SOCKET == sock)
{
// Error
}
SOCKADDR_IN si;
si.sin_family = AF_INET,
si.sin_port = htons(1234),
si.sin_addr.S_un.S_addr =inet_addr("127.0.0.1");
if(SOCKET_ERROR == bind(sock, (LPSOCKADDR)&si, sizeof(si)))
{
// Error;
}
if(SOCKET_ERROR == listen(sock,2))
{
// Error
}
SOCKET fd = INVALID_SOCKET;
while(INVALID_SOCKET != (fd=accept(sock,(LPSOCKADDR)&si,0)))
{
//...
}