1. 通过bind机制, socket必须要调用bind才能发送tcp包。 bind调用时需要一个ip地址。一般一台机器的多网口都要配置不同的ip地址(路由器除外,路由器是一个网桥设备,只是负责转发包,所以其它的端口一般没有ip地址)。
2. 通过ioctl来设置打开的socket. (ioctl (fd, SIOCGIFINDEX, &ifr)==0;
TCP编程时不管是客户端还是服务器端,都要调用bind后才能连接/收发数据。
UDP在客户端时可以不调用bind而直接使用recvfrom/sendto来收发数据。
在客户端一般是本地地址选择INETADDR_ANY, 表示所有网络接口。
代码如下:
#include <stdio.h>;
#include <string.h>;
#include <sys/socket.h>;
#include <netpacket/packet.h>;
#include <net/ethernet.h>;
#include <sys/ioctl.h>;
#include <net/if.h>;
#include <assert.h>;
int
main ()
{
struct sockaddr_ll sll;
int fd;
struct ifreq ifr;
char *dev;
fd = socket (PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
dev &#