Hi there,
I have a problem with my connected UDP server, I want to to send info to the client using send(), but for some reason I always get an error message such as: "bad file descriptor", any idea why?
here is a sample of my code:
Code:
int main(int argc, char *argv[])
{
unsigned int localPort;
int serverSock;
int clientSock;
int messageLength;
unsigned int clientLen;
unsigned char buffer[BUFFER_SIZE];
unsigned char message[MESSAGE_SIZE];
struct sockaddr_in serverAddr;
struct sockaddr_in clientAddr;
char* ptr;
FILE* file;
localPort = strtol(argv[1], &ptr, 10);
if ((serverSock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
{
printf("Failed to create socket\n");
exit(1);
}
memset(&serverAddr, 0, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
serverAddr.sin_port = htons(localPort);
clientAddr.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(serverSock, (struct sockaddr *) &serverAddr, sizeof(serverAddr)) < 0)
{
printf("Failed to bind the server socket\n");
exit(1);
}
while (1)
{
//let the server connect to the client address so that only one client
// maybe processed at a time
clientLen = sizeof(clientAddr);
if (connect(serverSock, (struct sockaddr *) &clientAddr, clientLen) < 0)
{
perror("Failed to connect with server");
exit(1);
}
//recv works gr8
if ((bytes = recv(serverSock, buffer, BUFFER_SIZE-1, 0)) < 1 )
{
fprintf(stderr,"Failed to receive bytes from server\n");
}
file = fopen(buffer, "r");
if( file == NULL )
{
perror("stat");
memset(message,0xff,1);
messageLength = strlen(message);
//here is the problem I always get destination address required
if ( send(serverSock,message,messageLength,0) != messageLength)
{
perror("stat");
exit(1);
}
}
/*
more code here
*/
clientAddr.sin_addr.s_addr = htonl(AF_UNSPEC);
}
exit(0);
}
Edit: Edit: anyone has any ideas please, ive been stuck on this problem for 2 days now