srfi.106
- 基本的なソケットインタフェース ¶ポータブルなソケットインタフェースです。
Gaucheはgauche.net
モジュールで包括的なネットワークAPIを提供しています
(gauche.net
- ネットワーキング参照)。しかしそれはGauche特有のものです。
このsrfiはソケット操作の小さなサブセットを提供し、
簡単なネットワーキングを必要とするアプリケーションをポータブルに書けるようにします。
gauche.net
と同じ名前を持ち、インタフェースが異なる手続きがあることに注意してください。
このsrfiのAPIで作られるソケットオブジェクトはGaucheの<socket>
オブジェクト
そのものなので、gauche.net
のAPIに渡したり、またその逆も可能です。
以下にあげる手続きはgauche.net
のものと全く同一です。
説明はgauche.net
- ネットワーキングを参照してください。
socket-accept socket-shutdown socket-close socket-input-port socket-output-port
[SRFI-106]{srfi.106
}
ノードnodeのサービスserviceと通信するためのソケットを作って返します。
ソケットの型がコネクション指向なら(つまり、ai-socktypeが
*sock-stream*
なら、これはデフォルトですが)、
返されるソケットは既にコネクトされた状態になっています。
nodeとserviceは文字列でなければなりません。
nodeはgetaddrinfo(3)
に渡されてサーバのIPアドレスに解決されます。
serviceが数字のみで構成されていた場合はポート番号とみなされます。
省略可能引数のデフォルト値は次の通りです:
ai-familyは*af-inet*
、
ai-socktypeは*sock-stream*
、
ai-flagsは(socket-merge-flags *ai-v4mapped* *ai-addrconfig*)
、
そしてai-protocolは*ipproto-ip*
。
有効なフラグの種類については下を参照してください。
gauche.net
のmake-client-socket
とはAPIが異なることに注意してください。
(make-client-socket "127.0.0.1" "80") ⇒ a <socket> connected to port 80 of localhost
[SRFI-106]{srfi.106
}
serviceで指定されるポートで待ち受けるサーバソケットを作って返します。
serviceは文字列でなければなりません。serviceが全て数字で構成されていた
場合はポート番号と解釈されます。
省略可能引数のデフォルト値は次の通りです:
ai-familyは*af-inet*
、
ai-socktypeは*sock-stream*
、
ai-protocolは*ipproto-ip*
。
有効なフラグの種類については下を参照してください。
gauche.net
のmake-server-socket
とはAPIが異なることに注意してください。
[SRFI-106]{srfi.106
}
(is-a? obj <socket>)
と同じです。
[SRFI-106]{srfi.106
}
gauche.net
のsocket-send
とほぼ同じですが、
gauche.net
のものが文字列も引数に取ることができるのに対し、
こちらはu8vectorのみを受け付けます。
実際に送られたオクテット数を返します。
[SRFI-106]{srfi.106
}
gauche.net
のsocket-recv
に似ていますが、こちらは
文字列ではなくu8vectorを返します。もし通信の相手がコネクションを閉じていた場合は、
空のu8vector #u8()
が返されます。
size引数は受信データの最大のサイズを指定します。 受信データがそれより小さい場合は返されるベクタもそれに合わせて短くなります。
このsrfiでは、典型的なソケットフラグを表す定数と、 名前からフラグ値を求めるマクロも提供しています。
[SRFI-106]{srfi.106
}
与えられたflag …をビット演算でマージします。
Gauche組み込みのlogior
と実質的に同じです。
[SRFI-106]{srfi.106
}
base-flagのビットのうち、flag …で示されるビットを0にします。
*af-inet* | AF_INET |
*af-inet6* | AF_INET6 |
*af-unspec* | AF_UNSPEC |
[SRFI-106]{srfi.106
}
nameがシンボルinet
、inet6
、unspec
のいずれかであれば、
それぞれ*af-inet*
、*af-inet6*
、*af-unspec*
の値へと展開されます。
nameがそれ以外のオブジェクトならエラーが報告されます。
*sock-stream* | SOCK_STREAM |
*sock-dgram* | SOCK_DGRAM |
[SRFI-106]{srfi.106
}
nameがシンボルstream
、datagram
のいずれかであれば、
それぞれ*sock-stream*
、*sock-dgram*
の値へと展開されます。
nameがそれ以外のオブジェクトならエラーが報告されます。
*ai-canonname* | AI_CANONNAME |
*ai-numerichost* | AI_NUMERICHOST |
*ai-v4mapped* | AI_V4MAPPED |
*ai-all* | AI_ALL |
*ai-addrconfig* | AI_ADDRCONFIG |
[SRFI-106]{srfi.106
}
シンボルcanoname
、numerichost
、
v4mapped
、all
、addrconfig
の組み合わせを、
対応するビットフラグの組み合わせへと展開します。
他のシンボルが渡された場合はエラーが報告されます。
(註: *ai-canonname*
に対応するのはcanoname
です)。
*ipproto-ip* | IPPROTO_IP |
*ipproto-tcp* | IPPROTO_TCP |
*ipproto-udp* | IPPROTO_UDP |
[SRFI-106]{srfi.106
}
シンボルip
、tcp
、and udp
を
それぞれ対応するフラグの値へと展開します。
他のシンボルが渡されたらエラーを報告します。
*msg-none* | 0 |
*msg-peek* | MSG_PEEK |
*msg-oob* | MSG_OOB |
*msg-waitall* | MSG_WAITALL |
[SRFI-106]{srfi.106
}
シンボルnone
、peek
、
oob
、wait-all
の組み合わせを、
対応するビットフラグの組み合わせへと展開します。
他のシンボルが渡された場合はエラーが報告されます。
(註: *msg-waitall*
に対応するのはwait-all
です)。
*shut-rd* | SHUT_RD |
*shut-wr* | SHUT_WR |
*shut-rdwr* | SHUT_RDWR |
[SRFI-106]{srfi.106
}
シンボルcode
とwrite
の組み合わせを対応するビットマスクの値へと展開します。
他のシンボルが渡された場合はエラーが報告されます。