私はUDPサーバをC言語で書こうとしています(Linuxの場合)。私は、socket()
関数では、SOCK_DGRAM
を使用し、SOCK_STREAM
を使用してはならないことを知っています。私はプログラム(コンパイルでエラーなし)を実行しようとすると、CでUDPサーバーを作成するには?
if ((list_s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
{
fprintf(stderr, "ERROR");
}
しかし、今は、それがlisten()
にエラーがあることを述べています。ここにそれがあります:
if (listen(list_s, 5) < 0)
{
fprintf(stderr, "ERROR IN LISTEN");
exit(EXIT_FAILURE);
}
あなたは問題が何かを理解できますか?
int list_s; /* listening socket */
int conn_s; /* connection socket */
short int port; /* port number */
struct sockaddr_in servaddr; /* socket address structure */
if ((list_s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
{
fprintf(stderr, "ERROR\n");
}
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(port);
if (bind(list_s, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)
{
fprintf(stderr, "ERROR IN BIND \n");
}
if (listen(list_s, 5) < 0) // AL POSTO DI 5 LISTENQ
{
fprintf(stderr, "ERROR IN LISTEN\n");
exit(EXIT_FAILURE);
}
一般的な発言として、多くの関数はerrnoで発生したエラーの詳細を表示します。 errnoをチェック(およびログ)することは常に賢明です - strerrorも参照してください。 – fvu
オフトピック: '//'コメントはC++では許可されていますが、C言語では許可されません。 –
@EitanT彼らはC99の一部です – fvu