我試圖引進在C.人爲延遲在使用C TCP套接字,對於競爭條件開發
的想法是,它需要一段時間的客戶端連接實現TCP套接字服務器的人爲延遲到目的地的服務器。
爲了實現這一點,我嘗試了,而不是簡單地使用阻塞accept()
接收連接,查詢等待的連接,然後在accept()
之前輪詢sleep()
。
但是,看起來好像數據寫入其他緩衝區,唯一的影響是它需要sleep()
延遲我的程序從緩衝區中讀取。同時客戶已經愉快地連接併發送了數據。
我對此有何看法?可能相關的信息:客戶端和服務器都通過同一個虛擬機(VMWare Player)上的環回接口連接。
我的客戶端代碼:
printf("Connecting to %s:18211 .. ", host); fflush(stdout);
fd = socket(AF_INET, SOCK_STREAM, 0);
memset(&sin, 0, sizeof(struct sockaddr_in));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = inet_addr(host);
sin.sin_port = htons(18211);
if(connect(fd, (void *)&sin, sizeof(struct sockaddr_in)) == -1) {
printf("Unable to connect to host %s\n", host);
exit(EXIT_FAILURE);
}
#define HITHERE ".oO Oo.\n"
if(write(fd, HITHERE, strlen(HITHERE)) == -1) {
printf("Unable to write banner to host %s\n", host);
exit(EXIT_FAILURE);
}
#undef HITHERE
printf("Connected!\nSending file .. "); fflush(stdout);
ffd = open(file, O_RDONLY);
if(ffd == -1) {
printf("Damn. Unable to open file\n");
exit(EXIT_FAILURE);
}
Server代碼:
我試圖做一個插座poll()
然後accept()
這裏睡前,但同時數據接收有客戶端沒有延遲。
我看不到任何服務器代碼。複製並粘貼錯誤? – thuovila
@thuovila我把它保存在一個從Live CD啓動的掛起的虛擬機中,但它沒有恢復,所以我失去了它! – deed02392