[解決済み] STRACEがEAGAINを表示する理由(リソースが一時的に使用できないため)
2022-02-10 07:43:51
質問事項
以下は、私が得ているシーケンスです。
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 7
setsockopt(7, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(7, SOL_SOCKET, SO_SNDBUF, [32120], 4) = 0
getsockopt(7, SOL_SOCKET, SO_SNDBUF, [30064835312], [4]) = 0
setsockopt(7, SOL_SOCKET, SO_SNDBUF, [64240], 4) = 0
getsockopt(7, SOL_SOCKET, SO_SNDBUF, [30064899552], [4]) = 0
stat("/etc/localtime", {st_dev=makedev(8, 1), st_ino=229001, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=8, st_size=265, st_atime=2013/07/15-06:30:03, st_mtime=2012/06/25-23:46:43, st_ctime=2012/06/25-23:46:43}) = 0
write(1, "[info 2013/07/16 05:53:24.622210"..., 114) = 114
setsockopt(7, SOL_SOCKET, SO_RCVBUF, [32120], 4) = 0
getsockopt(7, SOL_SOCKET, SO_RCVBUF, [30064835312], [4]) = 0
setsockopt(7, SOL_SOCKET, SO_RCVBUF, [64240], 4) = 0
getsockopt(7, SOL_SOCKET, SO_RCVBUF, [30064899552], [4]) = 0
fcntl(7, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(7, F_SETFL, O_RDWR|O_NONBLOCK) = 0
rt_sigaction(SIGPIPE, {SIG_IGN, [PIPE], SA_RESTORER|SA_RESTART, 0x33b3632920}, {SIG_DFL, [], 0}, 8) = 0
fcntl(7, F_GETFL) = 0x802 (flags O_RDWR|O_NONBLOCK)
fcntl(7, F_SETFL, O_RDWR|O_NONBLOCK) = 0
connect(7, {sa_family=AF_INET, sin_port=htons(50505), sin_addr=inet_addr("1.2.3.4")}, 16) = -1 EINPROGRESS (Operation now in progress)
poll([{fd=7, events=POLLIN|POLLOUT}], 1, 59000) = 1 ([{fd=7, revents=POLLOUT}])
fcntl(7, F_GETFL) = 0x802 (flags O_RDWR|O_NONBLOCK)
fcntl(7, F_SETFL, O_RDWR) = 0
getsockname(7, {sa_family=AF_INET, sin_port=htons(33220), sin_addr=inet_addr("10.112.204.215")}, [16]) = 0
fcntl(7, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(7, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(7, F_SETFL, O_RDWR|O_NONBLOCK) = 0
write(7, "d\23;\177\377\330\357\1&W\1\\\4\np\314\327\0\0\0\2W\0\rpnq-gst-"..., 103) = 103
fcntl(7, F_GETFL) = 0x802 (flags O_RDWR|O_NONBLOCK)
fcntl(7, F_SETFL, O_RDWR) = 0
fcntl(7, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(7, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(7, F_SETFL, O_RDWR|O_NONBLOCK) = 0
read(7, 0x9d9f90, 1) = -1 EAGAIN (Resource temporarily unavailable)
なぜこの読み込みが呼び出されるかというと、想定しているのは
poll
読み込むべきデータがあるときだけ目を覚ますようにします。
解決方法は?
poll
で目が覚めた。
revents = POLLOUT
これは、ソケットは書き込みの準備ができているが、読み出しの準備ができていないことを意味します。このコードは明らかにこのフラグをチェックせず、とにかく読み込もうとします。
これは意図的なものかもしれません。たとえ
poll
はソケットが読み込み可能であるとは言っていませんが、書き込み中に読み込み可能になった可能性があります。そのため、万が一何か現れた場合に備えてreadyを呼び出すのです。もしそうでなければ、また
poll
を実行し、再び待機します。これにより、2回の呼び出しではなく1回の呼び出しでデータを取得できるため、入力されたデータをより迅速に処理することができます。
関連
-
[解決済み】環境変数TERMが設定されていない件
-
[解決済み】 readChar(con, 5L, useBytes = TRUE) のエラー : 接続を開くことができません。
-
[解決済み】PytorchがCUDAは利用できないと言う件
-
[解決済み】gcc: エラー: 認識されないコマンドラインオプション
-
[解決済み] linuxでpsから特定のプロセスをgrepする方法は?
-
[解決済み] at&tアセンブリの「push」と「pushq」の違いは何ですか?
-
[解決済み] awk や sed を使って特定の文字を削除する
-
[解決済み] あるパターンの前にテキストを追加する際に、大文字小文字を無視してsedを使用する
-
[解決済み] php] <defunct>のプロセスを削除することはできますか?
-
[解決済み] sock send()コマンドで「Resource temporarily unavailable」と表示される原因は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】環境変数TERMが設定されていない件
-
[解決済み] gzip: stdin: not in gzip format tar: 子プロセスがステータス 1 を返しました。エラーは回復不可能:現在終了中
-
[解決済み】sed を使用して部分文字列を抽出する方法
-
[解決済み] Bashスクリプトでスクリプトファイル名を知るには?
-
[解決済み] Linuxです。WGET -i オプションを使用したスキームが見つからない
-
[解決済み] STRACEがEAGAINを表示する理由(リソースが一時的に使用できないため)
-
[解決済み] sudo mv home/* *」というコマンドは何をするのですか?[クローズド]
-
[解決済み] エラーです。"gzip: stdout: Linuxカーネルアップグレード中に「No space left on device」(デバイスに空き容量がない)が発生する(空き容量がある間)[closed]。
-
[解決済み] ユーザーデータスクリプトは私のカスタムAMIでは動作しませんが、標準のAmazon linuxでは動作しています。
-
[解決済み] bashの「#$」はどういう意味ですか?