
No.1ベストアンサー
- 回答日時:
select() もしくは accept() で socket が接続保留されているかどうか分かります。
クライアントAからの接続を維持し、クライアントからの電文を受け付ける状態にしつつ
クライアントBからの接続を待つのであれば、それぞれを別スレッド、もしくは、別プロセスにする
必要がありますね。
ありがとうございます。
listen()でデータ入力を待っている最中にクライアントBからのconnectは、そもそもTCP/IP層でエラーとなる気がしますが、後でconnectしてきたクライアントとconnectすることは可能ですか?
No.2
- 回答日時:
> listen()でデータ入力を待っている最中にクライアントBからのconnectは、そもそもTCP/IP層でエラーとなる気がしますが
ん?
listen() は、クライアントAからの接続が済んでいるのだから、もう必要ないですよね。
ちょっといいかげんですが、簡単にサーバのプログラムの構造と、処理の流れを書いてみます。
クライアントとの通信処理を、サーバの子プロセスとして処理するやり方を使います。
■サーバのプログラム構造
/* 準備 */
socket()
bind()
listen()
ioctl() /* 必要なら */
/* 接続待ち */
while (accept()) {
/* 通信処理:socket を使ってクライアントとやりとり */
}
■処理の流れ
・サーバ側の準備を済ませ、while の accept() で接続待ちになる
・クライアントAから connect() されると accept() から返ってくる
・子プロセスを fork() し、そこで返ってきた socket を使ってクライアントAとやりとりをする
・親プロセスは fork() し終わると、while() の accept() で次の接続を待つ
・親プロセスでは、後でクライアントAと会話しているプロセスを殺すためにプロセスIDを保存しておく
・クライアントBから connect() されると accept() から返ってくる
・クライアントAと会話しているプロセスを殺す
・クライアントBと会話するための子プロセスを fork() する
といった感じになると思います。
# もちろん、スレッドを使ったり、いろいろな組み合わせはあると思います
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) 「プロトコル」の定義について 5 2023/04/16 13:13
- ノートパソコン ESETの初期インストールの仕方 1 2022/10/14 08:26
- ネットワーク 社内ネットワークの1台だけ接続できないときがある 4 2023/01/25 11:58
- Windows 10 リモートデスクトップ接続 1 2022/07/12 14:30
- 個人事業主・自営業・フリーランス クラウドワークスとランサーズ、両方ご利用の方、源泉徴収について教えてください。 2 2022/04/27 16:13
- その他(税金) フリーランスの源泉徴収税について教えてください 3 2022/04/27 14:46
- ファイアウォール ポート開放で利用可能なTCP一覧の中に利用したいTCPが入ってない場合どうすればいいのでしょうか? 2 2022/09/12 10:31
- サーバー (童顔♀です)webサイト納品後,記事更新をこちらでする場合どうやりますか....? 3 2023/08/09 04:44
- ルーター・ネットワーク機器 ネットワーク共有フォルダーにWi-Fiで接続したい 4 2022/06/17 00:01
- PHP PHP でメールフォームを作成したい 1 2022/05/04 22:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ポリシー等で特定のサイトだけ...
-
VPN接続時のドメイン参加について
-
ソケットインタフェースに関して
-
sshでは接続できるのにsftpは接...
-
VPN接続確立後、Pingが通らない
-
FTPサーバに外部から接続で...
-
LANとダイアルアップの同時接続
-
OPERAでの同時ダウンロード数の...
-
グローバルIPの先のプライベー...
-
リモートデスクトップと動的IP...
-
ポケットWi-Fiに同時に複数端末...
-
macです。サーバに接続できません…
-
Sendmail→qmail移行設定方法
-
外部からの接続
-
LANに接続せずにtcpClientを用...
-
FireFoxを社内で使用する場合の...
-
サーバ移行に伴うメール送受信...
-
VB2008 で外部のMySQLに接続で...
-
インターネット接続制限の解除方法
-
8000番や8080番のポー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ポリシー等で特定のサイトだけ...
-
the onion rooter tor接続
-
リモートデスクトップと動的IP...
-
特定のクライアントPCからssh接...
-
VPN接続時のドメイン参加について
-
sshでは接続できるのにsftpは接...
-
サンダーバードメールが送受信...
-
TERATERMだけSSH接続できない
-
VPN接続確立後、Pingが通らない
-
【ソケット通信】TIME_WAITを0...
-
iphoneを遠隔操作したい
-
Win9xのデュアルホームの問題(...
-
SonicWALL DMZではまっています。
-
社内LANからのFTPが繋がりません
-
CiscoルータへのTELNET接続がで...
-
macです。サーバに接続できません…
-
ネットワークの最大接続数
-
FireFoxを社内で使用する場合の...
-
VBからネットワーク接続の制御(...
-
事務所で5台のうち1台だけネ...
おすすめ情報