我們試圖應用基於UDP的協議,並在sendto()函數中遇到了一些問題。UDP sendto()錯誤:無效的參數
當我們試圖響應與ACK寫入請求,我們得到「無效參數」從的sendto()函數
這是我們的代碼:
int sock; // Socket
sockaddr_in_t echoServAddr; // Local address
sockaddr_in_t echoClntAddr; // Client address
unsigned int cliAddrLen; // Length of incoming message
data_packet_t echoBuffer;
wrq_packet_t wrqBuffer;
unsigned short echoServPort; // Server port
int recvMsgSize; // Size of received message
ack_packet_t Ack;
struct timeval timeout;
fd_set fds;
/* Create socket for sending/receiving datagrams */
if ((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) perror("TTFTPERROR: socket() failed");
/* Construct local address structure */
memset(&echoServAddr, 0, sizeof(echoServAddr));
echoServAddr.sin_family = AF_INET;
echoServAddr.sin_addr.s_addr = htonl(INADDR_ANY);
echoServAddr.sin_port = htons(echoServPort);
/*Bind to the local address */
if (bind(sock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0) perror("TTFTPERROR: bind() failed");
FD_ZERO(&fds);
FD_SET(sock, &fds);
timeout.tv_sec = WAIT_FOR_PACKET_TIMEOUT;
timeout.tv_usec = 0;
while (1) {
recvMsgSize = recvfrom(sock, &wrqBuffer, FULL_PACKET_SIZE, 0, (struct sockaddr *) &echoClntAddr, &cliAddrLen);
if (recvMsgSize > 0) break; // we got something!
}
Ack = CreateAckPacket(0); // send ack 0
if (sendto(sock, &Ack, sizeof(Ack), 0, (struct sockaddr *) &echoClntAddr, sizeof(echoClntAddr)) == -1){
perror("TTFTPERROR: sendto() failed to send ack 0");
exit(-1);
}
你能幫助我們理解是錯的?
什麼是錯誤/錯誤代碼? – Samer
22,錯誤是「無效參數」 – user3350919
@szczurcio:這將是一個編譯器錯誤,而不是運行時錯誤。但是我知道[sendto()'](http://pubs.opengroup.org/onlinepubs/009695399/functions/sendto.html)採用了'const void *'作爲第二個參數。 –