Linuxϵͳµ÷Óà recv/recvfrom/recvmsgº¯ÊýÏê½â
¡¾recv/recvfrom/recvmsgϵͳµ÷Óá¿
¹¦ÄÜÃèÊö£º
´ÓÌ×½Ó×ÖÉϽÓÊÕÒ»¸öÏûÏ¢¡£¶ÔÓÚrecvfrom ºÍ recvmsg£¬¿ÉͬʱӦÓÃÓÚÃæÏòÁ¬½ÓµÄºÍÎÞÁ¬½ÓµÄÌ×½Ó×Ö¡£recvÒ»°ãÖ»ÓÃÔÚÃæÏòÁ¬½ÓµÄÌ×½Ó×Ö£¬¼¸ºõµÈͬÓÚrecvfrom£¬Ö»Òª½«recvfromµÄµÚÎå¸ö²ÎÊýÉèÖÃNULL¡£
Èç¹ûÏûϢ̫´ó£¬ÎÞ·¨ÍêÕû´æ·ÅÔÚËùÌṩµÄ»º³åÇø£¬¸ù¾Ý²»Í¬µÄÌ×½Ó×Ö£¬¶àÓàµÄ×ֽڻᶪÆú¡£
¼ÙÈçÌ×½Ó×ÖÉÏûÓÐÏûÏ¢¿ÉÒÔ¶ÁÈ¡£¬³ýÁËÌ×½Ó×ÖÒѱ»ÉèÖÃΪ·Ç×èÈûģʽ£¬·ñÔò½ÓÊÕµ÷ÓûáµÈ´ýÏûÏ¢µÄµ½À´¡£
Ó÷¨£º
#include <sys/types.h>
#include <sys/socket.h>
ssize_t recv(int sock, void *buf, size_t len, int flags);
ssize_t recvfrom(int sock, void *buf, size_t len, int flags,
struct sockaddr *from, socklen_t *fromlen);
ssize_t recvmsg(int sock, struct msghdr *msg, int flags);
²ÎÊý£º
sock£ºË÷Òý½«Òª´ÓÆä½ÓÊÕÊý¾ÝµÄÌ×½Ó×Ö¡£
buf£º´æ·ÅÏûÏ¢½ÓÊÕºóµÄ»º³åÇø¡£
len£ºbufËùÖ¸»º³åÇøµÄÈÝÁ¿¡£
flags£ºÊÇÒÔÏÂÒ»¸ö»òÕß¶à¸ö±êÖ¾µÄ×éºÏÌ壬¿Éͨ¹ýor²Ù×÷Á¬ÔÚÒ»Æð
MSG_DONTWAIT£º²Ù×÷²»»á±»×èÈû¡£
MSG_ERRQUEUE£º ָʾӦ¸Ã´ÓÌ×½Ó×ֵĴíÎó¶ÓÁÐÉϽÓÊÕ´íÎóÖµ£¬ÒÀ¾Ý²»Í¬µÄÐÒ飬´íÎóÖµÒÔijÖÖ¸¨×ôÐÔÏûÏ¢µÄ·½Ê½´«µÝ½øÀ´£¬ ʹÓÃÕßÓ¦¸ÃÌṩ×ã¹»´óµÄ»º³åÇø¡£µ¼Ö´íÎóµÄÔ·â°üͨ¹ýmsg_iovec×÷Ϊһ°ãµÄÊý¾ÝÀ´´«µÝ¡£µ¼Ö´íÎóµÄÊý¾Ý±¨ÔÄ¿±êµØÖ·×÷Ϊmsg_name±»Ìṩ¡£ ´íÎóÒÔsock_extended_err½á¹¹ÐÎ̬±»Ê¹Ó㬶¨ÒåÈçÏÂ
#define SO_EE_ORIGIN_NONE 0
#define SO_EE_ORIGIN_LOCAL 1
#define SO_EE_ORIGIN_ICMP 2
#define SO_EE_ORIGIN_ICMP6 3
struct sock_extended_err
{
u_int32_t ee_errno; /* error number */
u_int8_t ee_origin; /* where the error originated */
u_int8_t ee_type; /* type */
u_int8_t ee_code; /* code */
u_int8_t ee_pad;
u_int32_t ee_info; /* additional information */
u_int32_t ee_data; /* other data */
/* More data may follow */
};
MSG_PEEK£ºÖ¸Ê¾Êý¾Ý½ÓÊÕºó£¬ÔÚ½ÓÊÕ¶ÓÁÐÖÐ
Ïà¹ØÎĵµ£º
ǰÑÔ£¬Linux/Unix ÉçÇøµÄ°æ¿é²»ÈÈÄÖ£¬ÐÂÊÖÌ«¶à£¬¸ßÊÖ̫棬ż°Ñ×Ô¼ºÕ⼸ÄêµÄLinuxѧϰµÄ¹ý³Ì½²½²£¬Ï£ÍûÄܸø´ó¼ÒÓеã°ïÖú£¬
Òýµ¼³õѧÕßѧϰµÄ·½Ïò£¬ÉÙ×ßÍä·£¬Ê°빦±¶£¬Í¬Ê±Ò²ÊÇÅ×שÒýÓñ£¬Çë¹ýÀ´ÈËÈÈÁÒ·¢ÑÔ¡£
1. Ê×ÏÈÊìϤ Linux
½¨ÒéÔÚ Windows Éϰ²×° VMware Workstation 6.5.0(ÒÔϼò³ÆVM£©, ÏÂÔØÖÖ×ÓÔÚ ......
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define err(msg) perror(msg)
static void mkdirs(const char *dir)
{
char tmp[1024];
char *p;
&nbs ......
Linux ÖлñµÃ±¾»úÍø¿¨MACµØÖ·ºÜ¼òµ¥£¬ioctl()¾ÍOK¡£¿ÉÈçºÎ»ñµÃ¾ÖÓòÍøÆäËûÖ÷»úµÄMACµØÖ·ÄØ…Á´Â·²ã¹ã²¥ARPÇëÇó£¬È»ºó½ÓÊÕARPÏìÓ¦¡£ÊµÏÖ½é¸ö¹¦ÄÜÆäʵÒÑÓÐÏÖ³ÉÈý·½¿â¿ÉÓã¬Èçlibnet¡£²»¹ýÏë¼ÓÉî¶ÔÐÒéµÄÀí½âºÍLinuxÍøÂç±à³ÌAPIµÄÀí½â£¬jiayi »¹ÊǾö¶¨ÓÃLinuxµÄPF_PACKET×Ô¼ºÊµÏÖ£¬¸Ä°¡¸Ä£¬ÖÕÓڳɹ¦¡«ÒÔÏÂÊÇ´óÌå˼·
1. ......
¸ß¼¶¿É±à³Ì¿ØÖÆÆ÷
Èç¹ûϵͳֻÓÐÒ»¸öcpu£¬Ö÷picÊä³öÏßÒÔÖ±½ØÁ˵±µÄ·½Ê½Á¬½Óµ½cpuµÄintrÒý½Å¡£Èç¹ûϵͳÖаüº¬Á½¸ö»ò¶à¸öcpu,¾ÍÐèÒª¸ü¼Ó¸´ÔÓµÄpic.
intel´Óp3¿ªÊ¼ÒýÈëi/o¸ß¼¶¿É±ä³É¿ØÖÆÆ÷£¨APIC£©×é¼þ¡£80x86΢´¦ÀíÆ÷µ±Ç°ËùÓеÄcpu¶¼º¬ÓÐÒ»¸ö±¾µØapic¡£Ã¿¸ö±¾µØapic¶¼ÓÐ32λ¼Ä´æÆ÷£¬Ò»¸öÄÚ²¿Ê±ÖÓ£¬Ò»¸ö±¾µØ¶¨ÊÇÉ豸ÒÔ¼°Îª±¾µ ......
ÐźÅÖ¸¶¨´¦Àíº¯Êý
void (*signal (int signum,void (*handle)(int)))(int);ÉèÖÃij¸öÐźŵĴ¦Àí·½·¨
int sigaction(int signum,const struct sigaction *act,struct sigaction *oldact);ÓÃÓÚ¼ì²é»ò¸Ä±ä½ø³ÌÔÚ½Óµ½ÐźÅʱµÄ¶¯×÷
Ðźż¯²Ù×÷º¯Êý
static inline void sigaddset(sigset_t *set,int _sig);
static inline voi ......