2012-08-29 53 views
0

我已經在vC++ 2008中編寫了一個TCP套接字應用程序。如果超過x秒,我想要'發送'操作超時。對於我嘗試使用發送操作的Winsocket超時

char *optValue = "5000";
setsockopt(socket, SOL_SOCKET, SO_SNDTIMEO, optValue, sizeof(optValue));

它返回成功,但「發送」沒有如預期表現。然後試着用

tv.tv_sec = 10; tv.tv_usec = 0; FD_SET(accept_socket, &write_mask); select(socket, (fd_set *)0, &write_mask, (fd_set *)0, &tv);

還有「送」根據超時值集不行爲。 請檢查是否是正確的方法?

+1

你確定setsocket參數必須作爲字符串傳遞嗎?該函數接受一個char指針,但這只是用作指向「某些東西」的指針。 – harper

+0

我把它改成了整數,並且使用了char指針。 (如下面答案1所述)。仍然問題沒有解決。 –

回答

1

setsockopt,雖然接受char *實際上並不希望作爲字符串的值。你應該通過值作爲一個指向整數類型強制轉換爲char *

int optValue = 5000; 
setsockopt(socket, SOL_SOCKET, SO_SNDTIMEO, (const char *) &optValue, sizeof(optValue)); 

PS。您對sizeof的使用不符合您的想法。它返回指針的大小,而不是它指向的大小。

+0

我按照您的建議嘗試了相同的方法。它仍然沒有超時。 –