UDP Soketine 100 ms zaman aşımı ayarlamaya çalışıyorum. Ben C kullanıyorum. Kodumun yinelenen parçalarını aşağıda yazdım. Bunun neden zaman aşımına uğramadığından emin değilim, ancak sadece bir segment almadığında kilitleniyor. Bu, yalnızca bind() yöntemini kullanarak bağlı olmayan yuvalarda çalışır mı?UDP Soket Zaman Aşımı Ayarı
#define TIMEOUT_MS 100 /* Seconds between retransmits */
if ((rcv_sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
DieWithError("socket() failed");
if ((rcv_sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
DieWithError("socket() failed");
//set timer for recv_socket
static int timeout = TIMEOUT_MS;
setsockopt(rcv_sock, SOL_SOCKET, SO_RCVTIMEO,(char*)&timeout,sizeof(timeout));
if(recvfrom(rcv_sock, ackBuffer,sizeof(ackBuffer), 0,
(struct sockaddr *) &servAddr2, &fromSize) < 0){
//timeout reached
printf("Timout reached. Resending segment %d\n", seq_num);
num_timeouts++;
}
görünüyor. Muhtemelen öyle. 'SO_RCVTIMEO', Linux ve MacOS’ta' struct timeval' için belgelenmiştir, ancak bir 'int' geçiyorsunuz. Bunun yerine bir struct timeval'ı geçmeyi deneyin. Ayrıca, neden 'char tim' '' ve timeout' '' a çeviriyorsunuz? Hiç bir “char *” değil. – Celada