k********r 发帖数: 18 | 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 | c****y 发帖数: 24 | 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/
| k********r 发帖数: 18 | 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建
| m*****e 发帖数: 4193 | 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/
| k********r 发帖数: 18 | 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.
|
|