posix – What is bad file descriptor in c? – Education Career Blog

This is my code of function that wants to read file:

int sendByByte(int filed,int sockfd,int filesize)
 int i=0;
 int sent=0;
 char bufBUFSIZE;
  printf("fd is : %d\n",filed);
  printf("i: %d\n",i);
  int byte_read=read(filed,buf,BUFSIZE);
  if(byte_read == -1)
   printf("MOSHKEL dar read\n");
   return -1;
  int byte_send=send(sockfd,buf,byte_read,0);
   printf("MOSHKEL dar send\n");
   return -1;
 return sent;

The problem is when i=0 it works and read file but then read() returns -1.
What is the problem of the code?

  • socketfd => server’s socket
  • filed => file descriptor

and I sure that file descriptor is valid.


After the first iteration you close(filed) (line 22), causing all further reads to fail.
Move the close call outside the loop, or even better: Let the caller close the file descriptor, since he opened it.

Leave a Comment