C les Sockets Serveur bind() erreur

Tout se compile sans erreurs et des avertissements. Je commence le programme. Je visite localhost:8080 et le programme s'arrête - grand. J'essaie d'exécuter à nouveau le programme et j'ai d'Erreur: impossible de lier message. Pourquoi?

Code:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PORT 8080
#define PROTOCOL 0
#define BACKLOG 10
int main()
{
int fd;
int connfd;
struct sockaddr_in addr; //For bind()
struct sockaddr_in cliaddr; //For accept()
socklen_t cliaddrlen = sizeof(cliaddr);
//Open a socket
fd = socket(AF_INET, SOCK_STREAM, PROTOCOL);
if (fd == -1) {
printf("Error: unable to open a socket\n");
exit(1);
}
//Create an address
//memset(&addr, 0, sizeof addr);
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);
if ((bind(fd, (struct sockaddr *)&addr, sizeof(addr))) == -1) {
printf("Error: unable to bind\n");
printf("Error code: %d\n", errno);
exit(1);
}
//List for connections
if ((listen(fd, BACKLOG)) == -1) {
printf("Error: unable to listen for connections\n");
printf("Error code: %d\n", errno);
exit(1);
}
//Accept connections
connfd = accept(fd, (struct sockaddr *) &cliaddr, &cliaddrlen);
if (connfd == -1) {
printf("Error: unable to accept connections\n");
printf("Error code: %d\n", errno);
exit(1);
}
//read(connfd, buffer, bufferlen);
//write(connfd, data, datalen);
// close(connfd);
return 0;
}
  • printf("Error code: %d\n", errno); (ou utilisez perror ou strerror() ) BTW: le premier printf() pourrait probablement réinitialiser errno. BTW2: diagnostic de sortie devrait aller vers stderr.
  • whoopsie! Merci @wildplasser
  • Et l'erreur que vous obtenez le deuxième temps est probablement "EADDRINUSE address already in use" ?
  • OT: C'est int main(void) au moins.
InformationsquelleAutor chuckfinley | 2014-03-02