loop.c
来自「unix网络编程卷1:套接口API的全书源码」· C语言 代码 · 共 45 行
C
45 行
#include "mysdr.h"voidloop(int sockfd, socklen_t salen){ socklen_t len; ssize_t n; char *p; struct sockaddr *sa; struct sap_packet { uint32_t sap_header; uint32_t sap_src; char sap_data[BUFFSIZE]; } buf; sa = Malloc(salen); for ( ; ; ) { len = salen; n = Recvfrom(sockfd, &buf, sizeof(buf) - 1, 0, sa, &len); ((char *)&buf)[n] = 0; /* null terminate */ buf.sap_header = ntohl(buf.sap_header); printf("From %s hash 0x%04x\n", Sock_ntop(sa, len), buf.sap_header & SAP_HASH_MASK); if (((buf.sap_header & SAP_VERSION_MASK) >> SAP_VERSION_SHIFT) > 1) { err_msg("... version field not 1 (0x%08x)", buf.sap_header); continue; } if (buf.sap_header & SAP_IPV6) { err_msg("... IPv6"); continue; } if (buf.sap_header & (SAP_DELETE|SAP_ENCRYPTED|SAP_COMPRESSED)) { err_msg("... can't parse this packet type (0x%08x)", buf.sap_header); continue; } p = buf.sap_data + ((buf.sap_header & SAP_AUTHLEN_MASK) >> SAP_AUTHLEN_SHIFT); if (strcmp(p, "application/sdp") == 0) p += 16; printf("%s\n", p); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?