J'ai des problèmes pour créer un port sous Unix. Ce code renvoie toujours "Erreur lors de la création du socket (3)", ce qui n'a aucun sens puisque sockfd doit être plus petit que 0 pour imprimer la ligne d'erreur.Problèmes de création et de liaison de port sous Unix. (Nouveau dans la programmation réseau)
server.c:
int main (int argc, char **argv)
{
int sockfd;
struct sockaddr_in server_sockaddr;
char buff[TRANSFER_BUFFER_LEN];
/* check number of command line arguments */
if (argc < 2)
{
fprintf (stderr, "Usage: %s <port>\n");
exit (EXIT_FAILURE);
}
/* create server socket */
if ((sockfd = createUdpSocket (&sockfd,
&server_sockaddr,
atoi (*(argv + 1)))
) < 0);
{
fprintf (stderr, "Error creating socket (%d).\n", sockfd);
exit (EXIT_FAILURE);
}
...
return 0;
}
socket_utils.h:
int createUdpSocket (int *sockfd, struct sockaddr_in *client_sockaddr, int port)
{
/* create socket */
if ((*sockfd = socket (AF_INET, SOCK_DGRAM, 0)) == -1)
return -1;
memset (client_sockaddr, 0, sizeof (struct sockaddr_in));
client_sockaddr->sin_family = AF_INET;
client_sockaddr->sin_addr.s_addr = htonl (INADDR_ANY);
client_sockaddr->sin_port = htons (port);
/* bind socket */
if (!bind (*sockfd, (struct sockaddr*) &client_sockaddr, sizeof (sockfd)))
{
close (*sockfd);
return -2;
}
return *sockfd;
}
Toutes les idées? Cette même fonction fonctionne très bien dans mon programme client qui ne prend pas de valeur de port (prend à la place 0).
Cheers,
Rhys
Quel port # essayez-vous d'ouvrir? Les ports <= 1024 nécessitent des privilèges. –