前回の記事では、Windows でタイムアウトを試してみました。この記事では、Linux で試してみます。インタビューでこの質問に出会ったのですが、興味深いですね。 クライアントコード上で直接: #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <文字列.h> #include <ctype.h> #include <errno.h> #include <malloc.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/ioctl.h> #include <stdarg.h> #include <fcntl.h> #include <time.h> int main(int argc, char *argv[]) // 入力パラメータに注意し、IPとポートを指定します { int sockClient = socket(AF_INET, SOCK_STREAM, 0); 構造体 sockaddr_in addrSrv; inet_addr は inet_addr の引数に argv[1] を代入します。 addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(atoi(argv[2])); fcntl(sockClient, F_SETFL, fcntl(sockClient, F_GETFL, 0)|O_NONBLOCK); int iRet = connect(sockClient、(const struct sockaddr *)&addrSrv、sizeof(struct sockaddr_in)); printf("connect iRet is %d, errmsg:%s\n", iRet, strerror(errno)); // (iRet != 0) の場合、-1 を返すことは必ずしも例外ではありません { (errno != EINPROGRESS)の場合 { printf("接続エラー:%s\n", strerror(errno)); } それ以外 { 構造体timevaltm = {5, 0}; fd_set wset、rset; FD_ZERO(&wset); FD_ZERO(&rset); FD_SET(sockClient, &wset); FD_SET(sockClient, &rset); 整数時間1 = 時間(NULL); int n = select(sockClient + 1, &rset, &wset, NULL, &tm); 整数time2 = time(NULL); printf("時間差は%d\n", time2 - time1); (n < 0)の場合 { printf("選択エラー、nは%dです\n", n); } そうでない場合(n == 0) { printf("接続タイムアウト\n"); } そうでない場合 (n == 1) { FD_ISSET(sockClient, &wset)の場合 { printf("接続成功!\n"); fcntl(sockClient, F_SETFL, fcntl(sockClient, F_GETFL, 0) & ~O_NONBLOCK); } それ以外 { printf("不明なエラー:%s\n", strerror(errno)); } } それ以外 { printf("ああ、今は気にしないで、n は %d\n です", n); } } } printf("私はここにいます!\n"); getchar(); sockClient を閉じます。 0を返します。 } サーバーのコードは何度も書いているので、この記事では書きません。 テスト後、上記のプログラムは正常です。また、SYN パケットの再送信、RST パケットなどのパケットを tcpdump を使用してキャプチャすることで、多くのことを学ぶことができます。かなり興味深いですね。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: Vue での親子コンポーネント通信と、sync を使用して親子コンポーネント データを同期する
>>: Mac での MySQL と Squel Pro の設定
導入1.<iframe> タグ: iframe は、ページ内に内部フレームを生成するイン...
MySQL スロー クエリ (正式名称はスロー クエリ ログ) は、MySQL によって提供されるロ...
休憩中に、眠気を完全に吹き飛ばす電話がかかってきました。「開発者が更新 SQL を書くときに whe...
MySQLは私がとても気に入っているデータベースです。今日はWindows 8システムでインストール...
<iframe src="./ads_top_tian.html" all...
この記事の例では、メモ帳の小さな機能を実現するためのvueの具体的なコードを参考までに共有しています...
この記事では、トランザクション、インデックス、ロックなどの MySQL の知識ポイントの原理と使用法...
目次1. MySQLでよく使われる文字列関数2. 数値関数3. 日付と時刻の機能4. プロセス機能5...
このノートでは、 MySQL の B+Tree インデックスとは何ですか?クラスター化インデックスは...
ギリシャ文字は、特に数学や物理学などの科学技術分野で非常によく使用される記号列であり、特定の意味を持...
ネイティブjsカプセル化シームレスカルーセルプラグイン、参考までに、具体的な内容は次のとおりです。例...
注:この記事は他の人によって翻訳されていますが、考えるべき点が多く、理解しにくい点もあると感じていま...
:is と :where とは何ですか? :is()と:where()は、セレクターを作成するとき...
これまでのプロジェクトはすべて Windows システム環境にデプロイされていました。今回は Lin...
GitHub アドレス: https://github.com/dmhsq/dmhsq-mysql-...