cmn-clib(CommonLibraryForC)
C言語共通ライブラリ
|
ネットワークライブラリ TCP/IPソケット関連機能 [詳解]
#include "cmnclib/CmnNet.h"
#include "cmnclib/CmnData.h"
#include "cmnclib/CmnThread.h"
#include "cmnclib/CmnLog.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
データ構造 | |
struct | tag_RunServerMainProcParam |
マクロ定義 | |
#define | CmnNetSocket_isSocketError(x) (x < 0) |
#define | CMNNETSOCKET_RECEIVE_BUFFER_SIZE 4096 |
#define | CMNNETSOCKET_ACCEPT_TIMEOUT_SEC 1 |
型定義 | |
typedef struct tag_RunServerMainProcParam | RunServerMainProcParam |
関数 | |
CmnNetSocketStatus | CmnNetSocket_StartServer (unsigned short port, void(*serverMainProc)(CmnNetSocket *), CmnNetSocketServer *server) |
TCP/IP待ち受けサーバー起動 [詳解] | |
CmnNetSocketStatus | CmnNetSocket_EndServer (CmnNetSocketServer *server) |
サーバーを終了する [詳解] | |
CmnNetSocketStatus | CmnNetSocket_NoSessionRequest (const char *host, unsigned short port, CmnDataBuffer *request, CmnDataBuffer *response, const char *responseEndMark, const int responseEndMarkLen, int opt) |
セッションレスTCP/IPリクエスト送信 [詳解] | |
CmnNetSocketStatus | CmnNetSocket_ReceiveAll (CmnNetSocket *socket, CmnDataBuffer *buf, const char *endMark, const int endMarkLen) |
ソケットからすべてのデータを読み込む [詳解] | |
CmnNetSocketStatus | CmnNetSocket_SendAll (CmnNetSocket *socket, const void *data, int len) |
ソケットへすべてのデータを書き込む [詳解] | |
CmnNetSocketStatus | CmnNetSocket_ToSocketAddress (const char *host, unsigned short port, struct sockaddr_in *addr) |
IPアドレスやホスト名文字列とポート番号からsockaddr_inを設定する [詳解] | |
ネットワークライブラリ TCP/IPソケット関連機能
CmnNetSocketStatus CmnNetSocket_EndServer | ( | CmnNetSocketServer * | server | ) |
サーバーを終了する
server | サーバーオブジェクト |
CmnNetSocketStatus CmnNetSocket_NoSessionRequest | ( | const char * | host, |
unsigned short | port, | ||
CmnDataBuffer * | request, | ||
CmnDataBuffer * | response, | ||
const char * | responseEndMark, | ||
const int | responseEndMarkLen, | ||
int | opt | ||
) |
セッションレスTCP/IPリクエスト送信
セッションがなく、1回のRequest→Responseで完結するTCP/IPリクエストを送信する。
ip | リモートホストのアドレス(IPアドレスまたはホスト名) |
port | リモートホストのポート |
request | リクエストデータ |
response | レスポンスデータを格納するバッファ |
responseEndMark | 受信データの終わりを示すバイト列。相手の送信終了(graceful close)まで無制限に読み込み続ける場合はNULLを指定する。 |
responseEndMarkLen | endMarkのバイト数 |
opt | ソケットオプション(CNS_OPT_XXX を論理和で指定する) |
CmnNetSocketStatus CmnNetSocket_ReceiveAll | ( | CmnNetSocket * | socket, |
CmnDataBuffer * | buf, | ||
const char * | endMark, | ||
const int | endMarkLen | ||
) |
ソケットからすべてのデータを読み込む
受信データにendMarkが現れる、もしくは相手が送信終了(FIN送信、graceful close)するまでブロックして受信データを全て読み込む。
socket | Socket |
buf | 受信したデータを格納するバッファ。endMarkも含めて全ての受信データを格納する。 |
endMark | 受信データの終わりを示すバイト列。相手の送信終了(graceful close)まで無制限に読み込み続ける場合はNULLを指定する。 |
endMarkLen | endMarkのバイト数 |
CmnNetSocketStatus CmnNetSocket_SendAll | ( | CmnNetSocket * | socket, |
const void * | data, | ||
int | len | ||
) |
ソケットへすべてのデータを書き込む
socket | Socket |
data | 送信するデータ |
len | dataのバイト数 |
CmnNetSocketStatus CmnNetSocket_StartServer | ( | unsigned short | port, |
void(*)(CmnNetSocket *) | serverMainProc, | ||
CmnNetSocketServer * | server | ||
) |
TCP/IP待ち受けサーバー起動
portにLISTENするサーバー処理を別スレッドで開始する。
待ち受け開始後、portにアクセスがあればmethodを新規スレッドでコールする。 待ち受けを終了する場合はCmnNetSocket_EndServerをコールすること。 待ち受けスレッドはserver->acceptThreadに格納される。
port | 通信を待ち受けるポート |
serverMainProc | portにアクセスがあった場合に呼び出す処理 |
server | サーバー起動に成功した場合にサーバー情報を設定する。呼び出し側での初期化は不要。 |
CmnNetSocketStatus CmnNetSocket_ToSocketAddress | ( | const char * | host, |
unsigned short | port, | ||
struct sockaddr_in * | addr | ||
) |
IPアドレスやホスト名文字列とポート番号からsockaddr_inを設定する
host | IPアドレスまたはホスト名の文字列 |
port | ポート番号 |
addr | 変換したIPアドレス情報を格納する |