Redian新闻
>
About timeout in Socket Programming.
avatar
About timeout in Socket Programming.# Programming - 葵花宝典
k*r
1
我在编一个peer-to-peer 的程序。
Computer A 收到用户输入后就broadcast 个request packet 寻求文件
。有文件的Computer B和 C都返回 response. Computer A选择并发confirm 给B,同
时打开server接受连接。B收到confirm后和A建立连接。
我要给request 和confirm设个timeout。如果request 没及时收到response,重传。否
则取消timeout; 如果A的confirm 没及时收到B的连接,A就给C发confirm让C和A建
立连接,如收到就取消timeout;
Question:
1. 如何设timeout哪?
a.select(). 可我在主程序已经把select()放在loop里接受stdio, request/response/
confirm, 好像没地方再设其他select()给request/confirm用于timeout了。
b. 用alarm(). 可alarm()无法区分是alarm谁,哪个文件的哪个reques
avatar
c*y
2
fork()吧,子进程可以用个SIGALRM处理函数来设置个标志;子进程的结束状态可以由
wait/waitpid得到。然后父进程就在loop B/C,子进程成功返回就直接break,否则继
续loop。

我在编一个peer-to-peer 的程序。
Computer A 收到用户输入后就broadcast 个request packet 寻求文件
。有文件的Computer B和 C都返回 response. Computer A选择并发confirm 给B,同
时打开server接受连接。B收到confirm后和A建立连接。
我要给request 和confirm设个timeout。如果request 没及时收到response,重传。否
则取消timeout; 如果A的confirm 没及时收到B的连接,A就给C发confirm让C和A建
立连接,如收到就取消timeout;
Question:
1. 如何设timeout哪?
a.select(). 可我在主程序已经把select()放在loop里接受stdio, request/respon

【在 k********r 的大作中提到】
: 我在编一个peer-to-peer 的程序。
: Computer A 收到用户输入后就broadcast 个request packet 寻求文件
: 。有文件的Computer B和 C都返回 response. Computer A选择并发confirm 给B,同
: 时打开server接受连接。B收到confirm后和A建立连接。
: 我要给request 和confirm设个timeout。如果request 没及时收到response,重传。否
: 则取消timeout; 如果A的confirm 没及时收到B的连接,A就给C发confirm让C和A建
: 立连接,如收到就取消timeout;
: Question:
: 1. 如何设timeout哪?
: a.select(). 可我在主程序已经把select()放在loop里接受stdio, request/response/

avatar
k*r
3
什么叫loop B/C?如果父进程wait/waitpid的话 我的理解就是停在那儿 (suspend)等
子进程执行完是吗?那别的进程都得等着?

【在 c****y 的大作中提到】
: fork()吧,子进程可以用个SIGALRM处理函数来设置个标志;子进程的结束状态可以由
: wait/waitpid得到。然后父进程就在loop B/C,子进程成功返回就直接break,否则继
: 续loop。
:
: 我在编一个peer-to-peer 的程序。
: Computer A 收到用户输入后就broadcast 个request packet 寻求文件
: 。有文件的Computer B和 C都返回 response. Computer A选择并发confirm 给B,同
: 时打开server接受连接。B收到confirm后和A建立连接。
: 我要给request 和confirm设个timeout。如果request 没及时收到response,重传。否
: 则取消timeout; 如果A的confirm 没及时收到B的连接,A就给C发confirm让C和A建

avatar
m*e
4

response/
You need a state machine, and the main loop times out and checks it.

【在 k********r 的大作中提到】
: 我在编一个peer-to-peer 的程序。
: Computer A 收到用户输入后就broadcast 个request packet 寻求文件
: 。有文件的Computer B和 C都返回 response. Computer A选择并发confirm 给B,同
: 时打开server接受连接。B收到confirm后和A建立连接。
: 我要给request 和confirm设个timeout。如果request 没及时收到response,重传。否
: 则取消timeout; 如果A的confirm 没及时收到B的连接,A就给C发confirm让C和A建
: 立连接,如收到就取消timeout;
: Question:
: 1. 如何设timeout哪?
: a.select(). 可我在主程序已经把select()放在loop里接受stdio, request/response/

avatar
k*r
5
Can you explain in details?
Do you mean I should not set timeout of select() in main loop as NULL?
then what timeout should I set it as?

【在 m*****e 的大作中提到】
:
: response/
: You need a state machine, and the main loop times out and checks it.

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。