Tcp多线程发送的问题

passion_wu128 2015-02-27 08:52:22
在一个TCP连接中,多个线程同时往一个socket发送数据,请问一次send能否被中断?
或者通俗的说send函数能否保证该次要发送的数据全部发送完毕才发送其它线程的数据?
望高手解惑。
...全文
491 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bear234 2015-02-28
  • 打赏
  • 举报
回复
不能保证 there are two solutions: 1) lock it. 2) u define a special character to present the end of messages. You get what u gonna send and put it into a list, if specialCharacter.isfound ,then send(msg)
  • 打赏
  • 举报
回复
最好只用一个线程来发送同一个socket,没有文档保证send函数是原子操作。 http://stackoverflow.com/questions/7942595/linux-c-c-socket-send-in-multi-thread-code
赵4老师 2015-02-28
  • 打赏
  • 举报
回复
不能
encoderlee 版主 2015-02-28
  • 打赏
  • 举报
回复
socket上的IO毕竟是串行的,还是同一时刻只在一个线程中发送数据比较好,且不说send()是否是线程安全的,如果多个线程同时在发送数据,这些数据会混在一起,接收端该如何区分这些数据。
trublemaker 2015-02-28
  • 打赏
  • 举报
回复
只能自己控制,要不然接收端也乱了
孤飞俊驰 2015-02-28
  • 打赏
  • 举报
回复
send函数自身没带这样的功能,只能自己控制,发送时加锁,本次完全发送完成之后别的线程才能发送。
modyaj 2015-02-28
  • 打赏
  • 举报
回复
自己封装一下TCP 然后发送的时候加个锁
姚自新 2015-02-28
  • 打赏
  • 举报
回复
tcp是流式传输协议。可以搞一个缓冲区,加锁。 多个线程发送的数据,加入到缓冲中。 由一个单独的线程按FIFO的顺序将数据发送出去。
lincolnandlinda 2015-02-28
  • 打赏
  • 举报
回复
我记得winsock是可以保证的, 但是linux的socket不行.
passion_wu128 2015-02-28
  • 打赏
  • 举报
回复
引用
引用 1 楼 infoworld 的回复:
最好只用一个线程来发送同一个socket,没有文档保证send函数是原子操作。 http://stackoverflow.com/questions/7942595/linux-c-c-socket-send-in-multi-thread-code
多谢
passion_wu128 2015-02-28
  • 打赏
  • 举报
回复
引用 10 楼 luciferisnotsatan 的回复:
send成功,返回值是实际发送的字节数。send不保证你buffer里有多少,一次调用都给你发过去。 所以不管send是否为多线程安全,多线程send数据,你就该当会乱掉来思考
多谢。
luciferisnotsatan 2015-02-28
  • 打赏
  • 举报
回复
send成功,返回值是实际发送的字节数。send不保证你buffer里有多少,一次调用都给你发过去。 所以不管send是否为多线程安全,多线程send数据,你就该当会乱掉来思考

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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