

#include <nitroWiFi/cps.h>
typedef struct _CPSSoc {
OSThread *thread; // Owner of this socket
u32 block_type;
u8 state; // socket state
u8 ssl; // TCP if 0, SSL otherwise
u16 local_port; // my port number
void *con; // SSL connection information
u32 when; // when this was created (SYN sent/recvd)
u32 local_ip_real; // real IP that tha packet is sent to
u16 remote_port; // his port number
u16 remote_port_bound; // port number specified by CPS_SocBind()
CPSInAddr remote_ip; // his IP address
CPSInAddr remote_ip_bound; // IP address specified by CPS_SocBind()
u32 ackno; // my ACK number (i.e., received so far)
u32 seqno; // my SEQ number (i.e., sent so far)
u16 remote_win; // his window size
u16 remote_mss; // his MSS
u32 remote_ackno; // his ACK number (i.e., acked so far)
u32 ackrcvd; // # of ACKs received so far (for slow start)
int (*udpread_callback)(u8 *, u32, struct _CPSSoc *);
CPSSocBuf rcvbuf; // Low level receive buffer (filled by TCP state machine or UDP)
u32 rcvbufp; // index to rcvbuf.data[] (0 based)
CPSSocBuf sndbuf; // Low level send buffer (used by packet sender)
CPSSocBuf linbuf; // High level line input buffer
CPSSocBuf outbuf; // High level output buffer for buffered-output
u32 outbufp; // index to outbuf.data[]
} CPSSoc;
ソケットを定義する構造体です。OSThread内のフィールドからポイントされます。
殆どのフィールドはシステムが設定しますが、バッファ領域等はアプリケーションが設定しなければいけません。
| rcvbuf | 必須。CPS_SocRead()で返される受信バッファ領域TCPのウィンドウサイズは、この領域のサイズに依存します。 これより大きなUDPパケット、ICMP echo replyパケットは切り詰められます。 |
| sndbuf | 必須。ARM7に渡す送信パケットバッファ スレッド毎にそのアプリケーションが出力するパケット(IPヘッダ等を含む)の最大長+14バイト用意する必要があります。 通常は1514バイトにしてください。 |
| linbuf | 任意。CPS_SocGets()を使用する場合のみ、扱う行の最大の長さ+1バイト用意する必要があります。 |
| outbuf | 任意。CPS_SocPutChar()、CPS_SocPuts()、CPS_SocPrintf()を使用する場合のみ、適当な大きさで確保します。mymssの2倍にすると効率が良く使用することができます。 |
| con | SSLを使用する際はCPSSslConnection構造体へのポインタを設定します。 |
以下のフィールドは、UDP通信の際のポート・IPアドレスのバインド状態をコントロールするためにはudpread_callback()内で使用することが出来ます。
詳細はCPS_SetUdpCallback()、CPS_SocBind()を参照してください。
| remote_port | 実際の相手ポート番号。 |
| remote_ip | 実際の相手IPv4アドレス。 |
| remote_port_bound | CPS_SocBind()で指定した相手ポート番号。 |
| remote_ip_bound | CPS_SocBind()で指定した相手IPv4アドレス。 |
CPS_SocRegister, CPS_SocUse, CPS_SocRelease, CPS_SetUdpCallback, CPS_SocBind, CPS_SocWrite, CPSSocBuf, CPSSslConnection, CPSライブラリ型
Ver. 2005/10/24 初版