Python ソケットプログラミングについての備忘
ソケットプログラミングは難しい…。
自分でいろいろコードを書いてて思ったので疑問とか書いておく。
TCP/IPに繋がる大事な部分だからちゃんと調べないといけないよね。
書いたコードは以下。
pythonにおけるソケットプログラミングでは、
- socketを作る
sock = socket.sockeet(socket.AF_INET, socket.SOCK_STREAM)
↓ - socketをアドレスにbindする
sock.bind(listen_ip, listen_port)
↓ - bindされたsocketをlisten状態にする
sock.listen()
↓ - socketへの接続を許可(accept)する
con, addr = sock.accept()
で、conに対してデータをやり取りする、ってのが一般な流れ。
ただ、sock.accept()に関してはちょっと難しい部分が多いように感じる。
python3の公式ドキュメントには、
socket.accept()
接続を受け付けます。
ソケットはアドレスにbind済みで、listen中である必要があります。
戻り値は(conn, address) のペアで、 conn は接続を通じてデータの送受信を行うための 新しい ソケットオブジェクト、 address は接続先でソケットにbindしているアドレスを示します。
accept()で実際にどのような動作をするのか詳しく調べられていない。
受け付けるタイミングっていうのは、いったいいつなんだろう。
LISTENしているポートに接続があった瞬間にaccept()を叩くことで、それが許可されるのか、
それともLISTENしているポートにaccept()を叩いておくことで、接続が許可されるのかわからない。
低水準ネットワークインターフェイスと呼ばれるように、ソケット周りに関してはOS周りのソケットAPIを 呼び出すため、もっとLinuxの知識を深める必要がありそう。