目前小弟實作個專案,在sockfd = socket(AF_INET, SOCK_STREAM, 0)后,connect之前呼叫setsockopt(sockfd, IPPROTO_IP, IP_OPTIONS, (char *)&opthdr, sizeof(opthdr)) < 0)發現 setsockopt 錯誤提示: Invalid argument。有驅動或者其他方法可以在connect時傳入自己設定的ip options引數嗎? 以下為測驗代碼。 發現只有定義code為7或者131或者134時不會報錯,但是也不會連接上目標。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#define SERV_PORT 80
#define SERV_IP "221.14.145.31"
struct ip_option_hdr {
unsigned char code;
unsigned char length;
unsigned char offset;
unsigned addrs[9];
} opthdr;
int main(int argc, char *argv[]) {
int sockfd;
struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr(SERV_IP);
servaddr.sin_port = htons(SERV_PORT);
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) <= 0) {
perror("socket error : ");
exit(1);
}
memset((char *)&opthdr,0 , sizeof(opthdr));
opthdr.code = 7;
opthdr.length = 39;
opthdr.offset = 4;
//設定套接字發送該選項
if (setsockopt(sockfd, IPPROTO_IP, IP_OPTIONS, (char *)&opthdr, sizeof(opthdr)) < 0) {
perror("setsockopt error ");
return 0;
}
if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) {
perror("connect error ");
exit(1);
}
write(sockfd, "/r/n/r/n", strlen("/r/n/r/n"));
close(sockfd);
}
求解決方案。。。。。如果麻煩可以紅包支持。。。。
uj5u.com熱心網友回復:
人工置頂。。。。 指數補丁轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/114784.html
標籤:內核源代碼研究區
