关于connect的问题

beanders 2006-07-25 10:06:16
我的服务器端是 单线程模式,既一次只处理一个socket连接
可是为什么当服务器已经有一个连接时, 其它程序再 connect 服务器,仍然返回 0, 而我的服务器如果很久没有处理这些队列中的连接,那么这些客户程序将会异常中止,请问客户端该如何处理? 有没有办法让 connect在确认连接上服务器的时候再返回0

谢谢
...全文
220 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
beanders 2006-07-25
  • 打赏
  • 举报
回复
to xfzhao_cn()
我listen的时候backlog 设置的是1啊...
xfzhao_cn 2006-07-25
  • 打赏
  • 举报
回复
既然你的服务器就只能处理一个connection, 那应该listen 函数的第二个参数应该为1, 这样如果有其他client 要connect, 就会出错了
beanders 2006-07-25
  • 打赏
  • 举报
回复
谢谢,散啦!!
sunj_study 2006-07-25
  • 打赏
  • 举报
回复
在你的子函数处理完毕后,再打开刚才的监听socket,应该能满足你的要求了。
beanders 2006-07-25
  • 打赏
  • 举报
回复
to sunj_study()
谢谢,我用您的方法解决问题了,请问有没有其它方法啊,总觉得这种关闭监听SOCKET的方法不保险,呵呵
谢谢
没有俺就散分了
sunj_study 2006-07-25
  • 打赏
  • 举报
回复
accpet是不可能被调用的

==========

虽然accept没被调用,但第二个要连接服务器的客户连接请求还是会进入未决队列的,如果此时再有第三个客户连接请求到来,第三个客户端就会失败。这就是backlog=1的作用。虽然你没去处理第二个连接,但第二个客户端的connect函数还是会执行成功,返回0的。所以建议你获取第一个连接后,将监听socket关闭。这样其他客户端就不会连接成功了。
beanders 2006-07-25
  • 打赏
  • 举报
回复
to fengfangfang()
不太清楚您的意思,请明示
to sunj_study()
我的服务器端就是一个简单的for循环, 阻塞在accept函数里,当有连接到来accept返回,就进入另一个子函数与这个连接有关的通讯了,直到这个函数返回,accpet是不可能被调用的。
sunj_study 2006-07-25
  • 打赏
  • 举报
回复
backlog 是未决连接数,不是连到服务器的客户端数量。

可以定义一个标识,服务器接受连接时,验证是否已存在连接

或者服务器接收到第一个连接后,关掉监听socket。
fengfangfang 2006-07-25
  • 打赏
  • 举报
回复
用个变量控制一下

23,128

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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