📄 rcvmsg.c
字号:
#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h> /* for memset */#include <stdio.h>#include <stdlib.h>#include <sys/time.h>#include <unistd.h>#include "fixed_fd_zero.h"#include "msgparser.h"#define DEFAULT_PORT 434#define MAXMSG 2048int main(int argc, char *argv[]){ int reg_sock; struct sockaddr_in serv_addr, cli_addr; unsigned int cli_len; char msg[MAXMSG]; int n; fd_set set; int port; struct msg_extensions ext; if (argc > 1) { port = atoi(argv[1]); } else { port = DEFAULT_PORT; } if ((reg_sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket"); exit(-1); } /* * bind the address and port to listen to */ memset((char *) &serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(port); if (bind(reg_sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { perror("bind"); exit(-1); } for (;;) { FD_ZERO(&set); FD_SET(reg_sock, &set); select(FD_SETSIZE, &set, NULL, NULL, 0); memset(&cli_addr, 0, sizeof(cli_addr)); cli_len = sizeof(cli_addr); n = recvfrom(reg_sock, msg, MAXMSG, 0, (struct sockaddr*)&cli_addr, &cli_len); printf("Received %d bytes from %s:%d (%d)\n", n, inet_ntoa(cli_addr.sin_addr), ntohs(cli_addr.sin_port), cli_len); if (FD_ISSET(reg_sock, &set)) { parse_msg(msg, n, &ext); /* * Show what we got */ printf("Message is Registration "); if (ext.req) { printf("Request - id0=%08x , id1=%08x\n", (unsigned int) ntohl(ext.req->id[0]), (unsigned int) ntohl(ext.req->id[1])); } if (ext.rep) { printf("Reply\n"); } if (ext.mh_auth || ext.mf_auth || ext.fa_pubkey || ext.mn_keyrep || ext.fa_pubkeyrep) { printf("And has the following extensions:\n"); if (ext.mh_auth) { printf("\tMobile-Home Authentication" "\n"); } if (ext.mf_auth) { printf("\tMobile-Foreign " "Authentication\n"); } if (ext.fa_pubkey) { printf("\tFA Public Key\n"); } if (ext.mn_keyrep) { printf("\tSession Key to MN\n"); } if (ext.fa_pubkeyrep) { printf("\tSession Key to FA (pub)\n"); } } else { printf("And has no extensions\n"); } } /* if we got registration request or reply */ } /* loop forever waiting for messages */}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -