UDP通信用にデータ受信サーバを作ろうとしていますが、
どのPORTで動作しているのかソケットディスクリプタがいくつなのかをprintfしようとしていますが、
printfでコンソールにログが表示されません。
★の箇所を
(sockfd, buf, sizeof(buf), 0, (struct sockaddr*)&from, (socklen_t*)&addrlen);
から
recvfrom(0, buf, sizeof(buf), 0, (struct sockaddr*)&from, (socklen_t*)&addrlen);
にすると、コンソール上に
「-addr=0--port=20931--=sock=3====」と出力されます。reecvfrom関数に渡すソケットディスクリプタによってその前に実行されているprintfでのログが出ないなんてことがあり得るのでしょうか。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <getopt.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> static int get_socket(int, unsigned long); int main(int argc, char *argv[]) { char buf[12255] = {0,0}; int sockfd = 0; int port = 50001; int len = 0; struct sockaddr_in from; socklen_t addrlen; sockfd = get_socket(port, 0); addrlen = sizeof(struct sockaddr_in); printf("=sock=%d====",sockfd); len = recvfrom(sockfd, buf, sizeof(buf), 0, (struct sockaddr*)&from, (socklen_t*)&addrlen);/*★*/ close(sockfd); return 0; } static int get_socket(int portnum, unsigned long ipaddr) { int sockfd; struct sockaddr_in server; sockfd = socket(AF_INET, SOCK_DGRAM, 0); memset(&server, 0, sizeof(struct sockaddr_in)); server.sin_family = AF_INET; if (ipaddr == 0) { server.sin_addr.s_addr = htonl(INADDR_ANY); printf("-addr=%d--",server.sin_addr.s_addr); } else { server.sin_addr.s_addr = htonl(ipaddr); } server.sin_port = htons(portnum); printf("-port=%d--",server.sin_port); if (bind(sockfd, (struct sockaddr *) &server,sizeof(struct sockaddr_in)) == -1) { close(sockfd); return -1; } return sockfd; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/18 05:39