Connect出错:WSAENOBUFS~~~请问怎样修改发送缓冲区和接收缓冲区的大小?

libraworm 2004-08-20 06:00:41
程序创建了很多个连接,可能会超过一万,在连接过多的时候就会发生WSAENOBUFS错误,请问是不是应该把缓冲区设置的小一点呢?一定要是1024的倍数吗?用setsockopt修改缓冲区大小,应该如何写参数呢?

顺便,程序Connect的时候还出现过WSAEADDRINUSE,这个错误又是怎么回事呢?应该怎么办呢?

多谢各位大虾。@_@
...全文
152 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gdy119 2004-08-21
  • 打赏
  • 举报
回复
出现WSAEWOULDBLOCK 说明你的程序运行成功
只是你的SOcket设置为非阻塞的模式,所以返回WSAEWOULDBLOCK
所以你最好不断的检测直到返回成功!
lianglp 2004-08-21
  • 打赏
  • 举报
回复
下面为设置发送缓冲大小:
int nBufferSize = 16*1024 ;//设置发送缓冲为16K
setsockopt(sk,SOL_SOCKET,SO_SNDBUF,&nBufferSize,sizeof(int)) ;

同理接收缓冲大小第二个参数为SO_RCVBUF
oyljerry 2004-08-21
  • 打赏
  • 举报
回复
错误码为WSAENOBUFS,它指示原始调用中指定的缓冲区大小buflen太小,不能包容所有的结果信息

bind函数的功能是将套接字描述符与一个本地名字(用端口和IP地址来描述)作绑定,如果该名字已被使用,那么对bind函数的调用将返回SOCKET_ERROR,并且WSAGetLastError()将返回WSAEADDRINUSE

非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权。这种模式使用 起来比较复杂,因为函数在没有运行完成就进行返回,会不断地返回 WSAEWOULDBLOCK错误
你需要使用I/O模型来解决
libraworm 2004-08-20
  • 打赏
  • 举报
回复
还有,接收消息的时候有时会出现WSAEWOULDBLOCK,这个是不是网络很忙造成的呢?

刚学socket,新手,呵呵。^_^

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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