请教一个socket的问题

drizzt007 2003-07-08 03:31:46
作为服务器的socket的listen方法有一个backlog参数,是用来指定放置等待处理的连接请求的队列长度。
我在编写程序的时候,希望socket只接受一个连接,但是如果把backlog设置成1的话,还是可以接受2个连接,好像是一个在使用中,另一个在等待队列中。
请问有没有办法,可以让服务器端socket只接受一个客户的连接请求?
...全文
38 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pp616 2003-07-09
  • 打赏
  • 举报
回复
呵呵。不行吗。你再仔细查查代码。
asimpleman 2003-07-08
  • 打赏
  • 举报
回复
gz
drizzt007 2003-07-08
  • 打赏
  • 举报
回复
好像socket在listen的时候,如果有客户连接,并没有返回。如果队列满了,客户会收到一个错误。
listen(msock,1)==SOCKET_ERROR
这个SOCKET_ERROR是调用这个listen,创建等待队列的时候返回的
所以好像还是不可行
pp616 2003-07-08
  • 打赏
  • 举报
回复
if(listen(msock,1)==SOCKET_ERROR)
{
closesocket(msock);
return;
}
ssock=accept(msock,(struct sockaddr *)&fsin,&alen);
//accept函数返回的时候就是有客户连接或是监听停止了。
//这里你就可以做标记了。
drizzt007 2003-07-08
  • 打赏
  • 举报
回复
问题是新的连接来了的时候我并不知道,请问socket有这样的函数吗?就是新的连接请求到达时可以通知我。
pp616 2003-07-08
  • 打赏
  • 举报
回复
那你就做一个标志。只维护一个socket线程。
连接进来就判断标志。如果有了socket线程就关了对方。
如果没有就启动一个socket维护线程。
drizzt007 2003-07-08
  • 打赏
  • 举报
回复
谢谢,不过我得意思是,作为服务器的socket是不能关闭的,它必须一直存在并且监听客户的连接请求。有没有其他的办法?
pp616 2003-07-08
  • 打赏
  • 举报
回复
在accept函数返回后closesocket你listen的socket
这样不就只接受一个连接了吗。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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