Note that there are some explanatory texts on larger screens.

plurals
  1. POBad File Descriptor - Simple UDP Client
    primarykey
    data
    text
    <p>When attempting to create a simple UDP client, my code successfully opens the socket and reads in a small buffer from a file to be sent to a server specified by host address and port number by command line arguments.</p> <p>However, the sendto and recvfrom both fail with "Bad File Descriptor" and I can't figure out why.</p> <pre><code>void main(int argc, char* argv[]){ int s, n=0, obytes, inbytes; struct sockaddr_in sin; char *buffer; int address = 0; //Checks socket if((s = socket(AF_INET, SOCK_DGRAM, 0))&lt;0) { printf("Error creating socket\n"); exit(0); } //Resets values in socket structure memset((char*)&amp;sin, 0, sizeof(sin)); sin.sin_port = htons(atoi(argv[2])); sin.sin_family = AF_INET; sin.sin_addr.s_addr = inet_addr(argv[1]); printf("%d\n", sin.sin_addr.s_addr); /*Opens file to be sent and reads into buffer*/ FILE *readFile; readFile = fopen(argv[3], "r"); //Checks if file to be read can be opened if (readFile==NULL) { perror ("Error opening file"); } //Reads in all the characters to a buffer else{ while (!feof(readFile)) { buffer[n] = fgetc (readFile); n++; } buffer[n] = '\0'; printf ("Total number of bytes: %d\n", n); for(int i = 0; i&lt; n; i++){ printf("%c", buffer[i]); } } printf("File was opened\n"); //Sends the buffer to the destination designated by the socket structure and checks to see if bytes were sent if((obytes = sendto(s, buffer, strlen(buffer), 0, (struct sockaddr *)&amp;sin, sizeof(sin))) == -1 ) { perror("Sendto() error!"); exit(1); } printf("%d bytes were sent\n",obytes); //Receives response from the server and checks to see if bytes were actually received /* if((inbytes = recvfrom(s, buffer, strlen(buffer)+28, 0, (struct sockaddr *)&amp;sin, sizeof(struct sockaddr*))) == -1 ) { perror("Recvfrom() error!"); exit(1); }*/ printf("%d bytes were received.\n", inbytes); //Closes file fclose (readFile); } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload