ネットワークプログラミング相談室 Port30 [転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2014/10/31(金) 07:57:16.24ID:2NZQQB6u
主にソケットに関しての質疑応答スレッドです。

Programming UNIX Socket FAQ (日本語訳)
http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
Winsock Programmer's FAQ (日本語訳)
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/

関連リンクは>>2-10辺り
足りなかったら適当に付け足してね

前スレ
ネットワークプログラミング相談室 Port28
http://toro.2ch.net/test/read.cgi/tech/1334736934/
ネットワークプログラミング相談室 Port29
http://peace.2ch.net/test/read.cgi/tech/1351670708/

関連スレ
ネットワークプログラミング雑談
http://toro.2ch.net/test/read.cgi/tech/1235800707/
2017/05/18(木) 12:00:32.74ID:m/WiXwTD
>>534
>>532
2017/05/18(木) 12:01:31.14ID:7rOU10k1
>>535
そんなマシな話じゃないよ
>(例えば)httpサーバを作る時に
意図も理解できずにここだけ拾って、HTTPだぁ!\r\nが区切りでなきゃダメだ!って
思考停止してる馬鹿が騒いでいるだけの話w
2017/05/18(木) 12:13:36.04ID:Pt9OawB6
>>537
話が理解できないのな
2017/05/18(木) 12:39:18.53ID:q35GIXz6
>>537
でなきゃダメなんて誰も言ってないから・・・
2017/05/18(木) 12:51:07.33ID:7rOU10k1
>>539
お前らが一人なのか何人なのか知らんが、
まともに代案を出して俺と技術で議論することすらできなかった時点で
お話にならないんだよ馬鹿がw
2017/05/18(木) 12:55:19.23ID:Pt9OawB6
>>540
お前の間違いが余りにも馬鹿すぎて一斉にツッコまれただけ
2017/05/18(木) 13:09:36.41ID:q35GIXz6
>>540
とりあえず落ち着いて自分のレスを読み返してみろ
2017/05/18(木) 14:58:55.81ID:ps+tVdpC
>>494
ところで、どうしたの?
544デフォルトの名無しさん
垢版 |
2017/05/18(木) 15:16:22.61ID:6nNpr9wz
C4H6
2017/05/18(木) 18:53:08.85ID:Kw6kZtgL
TCP_NODELAY、PSHでくっつかなくなるとか一番やばいタイプの勘違い
狭い実験内ではそれでうまくいくように見えることもあるだろうが、だからこそヤバイ
2017/05/18(木) 21:06:44.73ID:K0KmS8r5
TCP_NODELAY も PSH もどっちかって言うとタイミングの指示だからねえ
しかも努力目標みたいなものだからそれに頼ったプログラミングとかあり得んわ
2017/05/18(木) 21:11:51.08ID:gekVxbq3
>>494にはOSの指定が無い。突っ込み所漫才でした。
548494
垢版 |
2017/05/22(月) 22:40:58.34ID:4aGkwFuX
TCP/IPストリームに実データとして区切りを書き込まずに、
shutdownで1回分の送信の区切りを表現できるといいなぁと思ったんですけどね
(その後にcloseせずに負荷なくセッションを再構築できるっぽい書き込みだったので)

まあ無いってことですね
残念

それにしてもTCP_NODELAY使えはなかなか面白かったです
パケットが綺麗に順序よくrecvでき、割り込みも即座に解決できてる理想的な環境ならいけるかもしれませんね
私は遠慮しておきますが

16KB送信してきたのに対して、2KBでrecvしたりとか
パケットの並び替えが発生して1回のercvで2パケット分以上取得したりとか
問題ありすぎ
2017/05/22(月) 22:54:55.59ID:evNLcAGh
お前の質問も以後遠慮するよ
2017/05/23(火) 18:23:04.41ID:+PAP7iSM
起訴からやりのあせ
2017/05/23(火) 20:03:51.47ID:+G6/THmC
TCP_NODELAYで1024バイトを2つsendして、そのあとのタイミングで
2048バイトで受信待ちをしたらどうなるか?

2048バイト1回で受信しきる実装はおそらくこの世にありません。
2048バイトでreadしても1024バイトが2回受信できます。
嘘だと思うなら試してみましょう。
2017/05/23(火) 20:05:53.92ID:uQsIVxQH
よかったな
2017/05/23(火) 23:51:55.53ID:XSLyG5v1
TCP_NODELAYで、一発のsendで送ったものが2度以上のrecvに分かれるなんて普通に起こるんだが
ちなXP時代のWinsock

そんなに綺麗にいくんならネットワークプログラミングで苦労しないんだよなあ・・・
2017/05/24(水) 00:09:29.45ID:OKPHnMsP
>>551
とりあえずWin10でwinsock2で
TCP_NODELAYかけたソケットに5バイトのsendを4回行って
recv1024バイトで受け止めたら一発で20バイトとれたぞ

お前がいるのはあの世か?

というか一発でとれなかったらTCPの受信効率悪すぎてヤバイから実験するまでもないことなんだがな・・・
2017/05/24(水) 00:33:12.09ID:/IbNyIPx
>>551
とりあえず>>517を理解することから始めろ
2017/05/24(水) 10:35:34.16ID:ZD/hb/2q
パケットサイズ意識してる?
557デフォルトの名無しさん
垢版 |
2017/05/24(水) 11:45:41.07ID:21J7O/JH
SCTPでやるという選択肢は?
2017/05/24(水) 14:04:07.96ID:4nncZNTT
ルーターのMTU書き換えてないだけだろうな
2017/05/24(水) 15:33:22.60ID:IgpnYvX1
オプションの実装で盛り上がる(笑)
2017/05/24(水) 15:44:03.92ID:IgpnYvX1
但し、意味は無い
2017/05/25(木) 17:47:37.48ID:Z/oIvPKq
OOBと混同してるんじゃね
562デフォルトの名無しさん
垢版 |
2017/06/23(金) 10:32:04.01ID:0OdP20aK
test
2017/07/30(日) 14:05:52.46ID:akjgDvR8
struct sockaddr* を引数にするライブラリを書いているんだけど
どうせみんな struct sockaddr_storage に保存するんだし
もういっそライブラリ内での引数は全部 struct sockaddr_storage* にしてもいいよな
対外的なところだけ struct sockaddr* にするわ
2017/07/30(日) 14:52:39.96ID:R8a7M54F
チラシの裏に書いておけよ
2017/07/30(日) 15:31:14.78ID:akjgDvR8
だからここに書いた!
566デフォルトの名無しさん
垢版 |
2017/08/25(金) 14:34:17.71ID:0nrK3Ckt
ネット障害 国内各地で発生 総務省など情報収集
https://mainichi.jp/articles/20170825/k00/00e/040/278000c
567デフォルトの名無しさん
垢版 |
2018/02/03(土) 09:43:16.35ID:HOqv4vPr
単純にsocketを使ってTCP/lPでクライアントとサーバーで通信するプログラムをLinuxのC言語で作っています。
ただsocketはノンブロッキングに設定しています。
クライアントはconnectを呼んだ後に正常にサーバーと繋がったか知りたくてselectを呼んでいますが、待ち状態からリターンしてきません。
サーバー側はacceptしており、その後に試しにクライアントへデータを送るとselectがリターンしてくるので、確実にsyn ackはクライアントへ返っていると思います。
selectはサーバーからのsyn ackでは待ち状態は解除されないのでしょうか。
やりたいことはconnectではサーバー応答を待たないで即リターンし、コネクションが確立できたかの結果は別途知りたい。
ググるといくつかのサイトでsocketをノンブロッキングに設定して、connectをコールした後にselectで待つサンプルがありました。
それを真似たのですが、サーバー側はconnec待ちの状態で、クライアントがconnectコール後にselectをコールしてもselectはリターンしてこない。
こうすれば出来る、あるいはそんなこと出来ないなどありましたらご教授お願いします。
2018/02/03(土) 09:49:25.96ID:pP2dxBQr
まずパケットをダンプして見たら
569デフォルトの名無しさん
垢版 |
2018/02/03(土) 09:49:30.43ID:qWVkS+Es
select呼んでるのに待ちが発生とか
なんかやらかしてる
2018/02/03(土) 10:21:23.77ID:5+N/4dbU
connectがEINPROGRESSになった後、本当にエラーになってるんじゃないか?
selectに回す前にMSG_PEEKでrecvするといいよ。エラーならrecvのエラーで
取得できる。
2018/02/03(土) 10:32:27.09ID:bM1piKWo
select(2)  第3引数を NULL でやってたり?
2018/02/03(土) 11:29:21.54ID:diDsLtky
質問者は???状態か
2018/02/03(土) 12:00:34.03ID:R5rU++Gd
>>572
動くコードを寄越せや
と思ってそう
2018/02/03(土) 12:28:18.58ID:Zh144c7Y
まず動かないソフト晒せや
575デフォルトの名無しさん
垢版 |
2018/02/03(土) 12:30:38.79ID:jcEuZ+bz
先ずは自分のコード晒せと思ってそう
2018/02/03(土) 20:46:46.39ID:jVO3D5B/
>>567
投げ捨てか
2018/02/04(日) 11:40:23.51ID:hychyaav
>>567は逃亡確定、解散
2018/02/04(日) 14:23:55.13ID:cGhYp1tS
>>577
え、今まで待ってたの?
2018/02/06(火) 13:04:08.73ID:7vEMaXgn
>>570
何言ってるかわからん。きちんと説明できない馬鹿なの?
2018/02/06(火) 23:14:36.77ID:mkSBl8xw
>>579
おまえのお母さんじゃないんだけど?
581デフォルトの名無しさん
垢版 |
2018/02/07(水) 05:21:28.74ID:d07AIdFv
>>579
横からだけど>>570ってかなり分かりやすいと思うんだけど
とりあえずクライアント側でメッセージの取りこぼしが無いかどうか見直してみたら
2018/02/07(水) 10:00:13.45ID:2/HDdqqu
横からだけど「パケットをダンプ」が出来ないんだろう
2018/02/07(水) 12:22:28.37ID:TouhVGwr
>>570はそんなこと言ってないのにね
584デフォルトの名無しさん
垢版 |
2018/02/07(水) 16:00:04.81ID:bLqJ09hb
文盲なのさ
2018/02/07(水) 16:00:50.43ID:2YT0rYkL
>>570さん自演はやめてください。みっともないですよ。
586デフォルトの名無しさん
垢版 |
2018/02/07(水) 22:28:35.16ID:MTpdY7NJ
"!"!"!MOHYO!"!"!"2"

1.[[[HUn≒MUL=POSI≠MAHO+Set*HUGE=SAGE=LOGE=NOISIA=0≒1]]]

2-[[[[[[[E=RAT%2^10%SPELAn!%]&!TOWA&!PEG#!NOLNOL8!#!HYAGO!2#]1*2=1]U]S]0]O]!#PAL!

3--->PAGODOL7&!@17,2222734.15&[[[%%RENRAK6,9,99"^10"]#$11.2%}]KAIJ]{

41.2SSS = RALQI2.β{{{RA4,0,238^97,1,$.S.L.E.I.L."Q5352.15Q"JOL"5*3>>>41.3q}}}>1.2<0
.3φTALHOSI"0">>>105.10<1.235<1.2>51≠52===55.632>V="E=0.835"of"1.32","632",0.683,1.end

{
2018/02/07(水) 22:47:48.45ID:TouhVGwr
本当におかしくなったようだ。
>>570程度のことが理解できなくて、悔しいんだろうなあ。
2018/02/16(金) 06:06:35.28ID:W1XJdyx1
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
2018/03/24(土) 17:41:30.83ID:fT1SCAXE
>>587
>>585
590デフォルトの名無しさん
垢版 |
2018/04/02(月) 21:26:10.59ID:Pnq6v0Lh
諸先輩型、お知恵拝借したく…。
IE11で動かすJavaScriptから、同じPC上のQt5アプリケーションのQlocalServerにメッセージを送りたいのです。
JavaScriptにはどのような実装をすればよいでしょうか?
制限として、Node.jsはインストールできません。それ以外のJavaScriptのライブラリであれば可です。(ただし、HTMLのheadで読み込めるライブラリに限ります。)
2018/04/03(火) 09:36:51.96ID:9o9ogUOH
知恵ありません
592デフォルトの名無しさん
垢版 |
2018/04/03(火) 20:33:05.00ID:21NZQbQq
>>590
590です。
自己解決しました。
IE11上ではJavaScriptのWebsocketは使用できないと思い込んでいたのですが、使用できることに気付き、解決できました。
※IE9互換を強制していたのが原因でした(汗

大変お騒がせしました。
593デフォルトの名無しさん
垢版 |
2018/04/04(水) 01:59:20.83ID:h2UR4/YM
意味もなくバージョン強制する糞アプリってあるよね
2018/04/04(水) 09:35:58.69ID:Wk9X/T76
(javaのクライアントを使えば万能)
2018/04/14(土) 10:16:22.80ID:xbLOPvem
8バイトしかデータを送らない時に着信するまでに20秒くらいかかるのは
Nagleアルゴリズムのせいだと思ってTCP_NODELAYを設定したのだけど
改善しませんでした。OSはLinux4.15.15です

int flag = 1;
::setsockopt( sd, IPPROTO_TCP, TCP_NODELAY, &flag, (socklen_t)sizeof(flag) );

のような書き方をしているのですがフラグを指定するだけでNagleアルゴリズムを
抑制できるのでしょうか?
2018/04/14(土) 10:51:40.53ID:HWfDX8oO
TCP_NODELAY以前になんかおかしいと思う。
きっと別の理由だよ。
2018/04/14(土) 12:47:40.04ID:f4KKMXqG
頭が悪いんだろう
2018/04/14(土) 13:05:59.74ID:aYmqXLA5
>>595
まずWireSharkとかでパケットがちゃんとでてるかから見てみよう
599デフォルトの名無しさん
垢版 |
2018/04/14(土) 15:52:31.59ID:1T8oabCl
タイムアウトしてるな
2018/04/14(土) 16:11:23.89ID:m1ARv4OD
何が出るかな、何が出るかな、後出し
601デフォルトの名無しさん
垢版 |
2018/04/14(土) 17:57:24.99ID:3+pJLfBU
>>595
20秒かかるならまずは名前解決を疑ってみろよ
resolv.confを窓から投げ捨てろ
602デフォルトの名無しさん
垢版 |
2018/04/14(土) 18:05:10.78ID:U01UEKcX
Happy Eyeballs ?
603595
垢版 |
2018/04/14(土) 19:00:22.12ID:xbLOPvem
>>596
有難う、別の理由っぽいですけどまだ特定できていません

>>598
wiresharkの使い方が分からずまだよく分かっていない状態です
一応通信しようとした時にパケットは出ているような

>>601
特定の部分を通った時に起こる現象のようで、全て20秒かかるわけではないです
プログラム内部でIPとポートも取れていますので名前解決ではなさそうです

特定の部分というのも殆ど何もしていないような感じなのでよくわからない状態です
2018/04/14(土) 21:42:54.27ID:ENYDOYLp
意味不明
2018/04/15(日) 09:33:58.52ID:jf3zvGbL
selectの使い方がおかしくて、他のイベントひろうまで受信していないように
みえているんじゃないのかな。
2018/04/15(日) 09:35:28.12ID:JPDzHIQl
エスパーお疲れ
2018/04/15(日) 09:39:15.32ID:tp2QT14K
そういや、Linuxならwireshrak使うまでもなくtcpdumpでよかろう。
2018/04/15(日) 11:23:03.92ID:CQSd9Wz5
ところで相手、ネットワークはどうなってるの?
609595
垢版 |
2018/04/15(日) 17:36:20.40ID:hw4ypno6
>>608
自前プログラムを2つ作ってloでつなげています

Libev++を使っているのですが、その使い方が悪いのかも知れません
AとBのプログラムがあるとしてBがAに接続した時にそれぞれのプログラムで
Libev++のコールバックをev:READで仕掛けています
何か通信する時は横から開始する合図をコマンドみたいな形で送っています
お互いに送信するだけなら問題ないのですが、送受信した後短い通信をすると
20秒位反応しなくなるようです
連続して送受信しても症状が出ないし、症状が出ても待っていれば通信は完了するようです

長文失礼しました
2018/04/16(月) 13:02:30.35ID:oApVoahS
まずどこで20秒掛かってるか調べたの?straceですぐ分かるでしょ
2018/04/16(月) 14:00:10.96ID:DUyR1W4O
質問は「デバッグの方法がわかりません」でした
2018/04/17(火) 10:54:35.04ID:YZqFj8BZ
不足してるのはどの知識でしょうか?
理論、仕様、実装、デバッグ
613デフォルトの名無しさん
垢版 |
2018/04/17(火) 13:09:56.95ID:QO/6Yzum
カニンガムの法則を覚えろ
2018/04/17(火) 13:40:50.01ID:UaggxLFX
揚げ足を取られる 掲示板の法則
2018/04/17(火) 15:40:59.32ID:6Z/0s27P
「賢い質問の仕方」を見ろよ、だろ
616デフォルトの名無しさん
垢版 |
2018/04/17(火) 15:43:43.29ID:CCYPJkgd
スレチ
2018/04/17(火) 16:36:27.63ID:1WSDtgRH
イタチ
2018/04/17(火) 20:52:58.70ID:EgRHZf0r
次のアホどうぞ
2018/04/18(水) 08:33:35.50ID:EU/tZBmZ
俺が全員分のアホ吸収したるから落ち着けよ
2018/04/18(水) 17:54:43.21ID:iZpDQ/7n
質問なんですが、
TCP の TIME_WAIT 状態のポートを回収する待ち時間が120秒の環境(os)で、
10秒毎に curl コマンドなどを動かす

TIME_WAIT 状態のポートが増えていって最終的にはポート番号が枯渇し、
(connectで待たされて)120 秒に1度しかリクエストが実行されない、
という理解はあっていますでしょうか?

それとも足りなくなった段階で古い方から一度に沢山解放される?
2018/04/19(木) 03:43:39.16ID:s5A0Y+Tw
やってみればいいじゃない。
なんで最近の子は手を動かさないのかね。
2018/04/19(木) 06:04:34.14ID:c48O4SX1
いやそれが3秒に2回くらいcurlでファイル取ってくる処理をずっと動かしてても枯渇する様子がなくって
どうなってるのかな、と。

カーネルソース読めとか言われそうだが
2018/04/19(木) 09:12:49.59ID:kuj4iymt
実装依存をわかっていてなぜ聞くのか、めんどくせー奴
2018/04/19(木) 09:59:49.88ID:GDnzBlki
リソースの見方が分からないという質問かな、誰か教えてやれ
2018/04/19(木) 10:13:56.30ID:vUDsscfK
Linuxだと枯渇するよ。
net.ipv4.ip_local_port_range
net.ipv4.tcp_tw_recycle
net.ipv4.tcp_fin_timeout
あたりでググって解説読むといいよ。
自力でたどり着けない時点で、貴方にその仕事は向いていないけど。
626デフォルトの名無しさん
垢版 |
2018/04/20(金) 09:48:58.11ID:WJk0jxxj
BSD最強
2018/04/20(金) 11:37:39.86ID:eUHWyBcr
スレチ
628デフォルトの名無しさん
垢版 |
2018/05/01(火) 09:18:36.69ID:pcuPqOhI
処のところの 5ch が重かったり鯖落ちしたりというのは
5ch 自体の問題やネットワークの問題もあるが
実はアホの山下謹製専ブラ Jane Style 4.00版のせいだと判明した
これのTLS対応に欠陥があり、毎回フルハンドシェイクを行って鯖の負荷を増大させていた
その他にもツッコミどころ満載のクソソフトなので
使っている人を見かけたらすぐにゴミ箱に捨てるように言ってほしい
2018/05/01(火) 09:32:23.61ID:ht9dkIpJ
TLSのハンドシェイクを鯖で行っているなら5ch運営が究極の馬鹿ということになるが。
2018/05/01(火) 09:36:05.28ID:t/Lqs5tD
やっぱりか、やたらメモリアクセスエラーが起きている
2018/05/01(火) 09:36:47.53ID:t/Lqs5tD
したらばがメニューにない
2018/05/01(火) 10:40:17.57ID:fh3t+8jD
したらばがメニューに?
ツリービューじゃなく?
2018/05/01(火) 11:06:24.88ID:4hJYf7n+
板一覧にないということ、追加できていない
2018/05/01(火) 13:58:46.15ID:YWPo/pc8
ヘルプ--->ジェーンBBSを開く、でいけた
2018/05/06(日) 13:46:42.65ID:25QL8AqQ
ちょっと質問させてください
プログラムの勉強を初めて、スタンドアロンのアプリを作っていたんですが、最近ソーシャルな機能を入れてみたいと思い
ネットワークプログラムを勉強しているんですが
C#でクライアントを、PHPでサーバーといった構成で作ってみようと思っています
この場合とりあえずTCP/IPを勉強するって事でいいんですかね?
簡単なechoサーバーとクライアント作成まではできたのですが、ここから複数のクライアントの受付やどういった情報をどういった形式でやりとりしたらいいのかがさっぱりわからなくて立ち止まっています
今考えているのは、JSONでやりとりして、そこからコールバックでサーバー側の処理を行わせていこうかなくらいしか思いついていないです。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。