Linux 根據IP建立Socket

2021-08-17 21:44:24 字數 2043 閱讀 7353

根據ip建立socket

#include #include #include #include #include #include #include #include #define logd printf

#define logi printf

#define loge printf

int just_sock_connect_ip(const char* ip, int port)

; if (ip == null) return -einval;

logi("just_sock_connect_ip(%s:%d)", ip, port);

sockfd = socket(af_inet,sock_stream,0);

if(sockfd == -1)

//設定sock快速收發,防止粘包

setsockopt(sockfd, ipproto_tcp, tcp_nodelay,&on,sizeof(on));

setsockopt(sockfd, sol_socket, so_sndtimeo,&timev,sizeof(timev));

//設定非阻塞

//flags = fcntl(sockfd, f_getfl, 0);

//fcntl(sockfd, f_setfl, flags | o_nonblock);

logi("socket create success, fd =%d", sockfd);

memset((void*)&servaddr, 0, sizeof(servaddr));

servaddr.sin_family = af_inet;

servaddr.sin_port = htons(port);

servaddr.sin_addr.s_addr = inet_addr(ip);

reval = connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));

if (reval == 0) return sockfd;

switch(errno)

if (reval < 0)

logi("connect [%s:%d] success!", ip, port);

return sockfd;

}

當connect返回負值但errno=einprogress/ealready時表示「正在處理中」,可用select機制來監控可寫性,socket一旦可寫就說明連線成功了:

static int socket_wait_writable(int sockfd, int timeout_ms)

long time_seft = timeout_ms - time_used;

timeout_v.tv_sec = time_seft/1000;

timeout_v.tv_usec = time_seft%1000 * 1000;

fd_zero(&wset);

fd_zero(&eset);

fd_set(sockfd, &wset);

fd_set(sockfd, &eset);

reval = select(sockfd + 1, null, &wset, &eset , &timeout_v);

if(reval == -1 && errno != eintr)

else if( reval == 0)

else if(reval > 0 && fd_isset(sockfd, &eset))

else if ( reval > 0 && fd_isset(sockfd, &wset))

else

}return 0;

}

【測試用例】

void just_sock_connect_test(void)

loge("just_sock_connect_ip success");

}

根據IP獲取省市

public class ipaddress 2 0 4 d 25 0 5 01 d d?ip正則 string ip string.empty ip位址 string country string.empty 國家 string adr string.empty 省市 string html ge...

根據網域名稱取出ip

本地網域名稱伺服器採用迭代查詢 假定網域名稱為m.xyz.com的主機想知道另一台主機 網域名稱為y.abc.com 的ip位址。如,主機m.xyz.com打算傳送郵件給主機y.abc.com。這時就必須知道主機y.abc.com的ip位址。下面是圖6 5的幾個查詢步驟 1 主機m.xyz.com先...

Linux建立虛擬ip的方法

1 虛擬ip的介紹 虛擬ip位址 vip 是乙個不與特定計算機或乙個計算機中的網路介面卡 nic 相連的ip位址。資料報被傳送到這個vip位址,但是所有的資料還是經過真實的網路介面。就是一塊網絡卡上邊有兩個ip,然後無論到哪個ip的流量都會經過物理網絡卡。2 虛擬ip的作用 大部分虛擬ip基本上都用...