CPSSoc

定義

#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 初版