cmn-clib(CommonLibraryForC)
C言語共通ライブラリ
 全て データ構造 ファイル 関数 変数 型定義 列挙型 列挙値 マクロ定義
CmnNet.h ファイル

ネットワークライブラリ ヘッダファイル [詳解]

#include "cmnclib/Common.h"
#include "cmnclib/CmnData.h"
#include "cmnclib/CmnThread.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

[ソースコード]

データ構造

struct  tag_CmnNetSocket
 
struct  tag_CmnNetSocketServer
 
struct  tag_CmnNetHttpResponse
 

マクロ定義

#define CNS_OPT_GRACEFUL_CLOSE   0x01
 

型定義

typedef struct tag_CmnNetSocket CmnNetSocket
 
typedef struct tag_CmnNetSocketServer CmnNetSocketServer
 
typedef struct tag_CmnNetHttpResponse CmnNetHttpResponse
 

列挙型

enum  CmnNetSocketStatus {
  CNS_SUCCESS = 0, CNS_INPUT_ERROR, CNS_OUTPUT_ERROR, CNS_ADDRESS_ERROR,
  CNS_SERVER_INITIAL_ERROR = 101, CNS_BIND_ERROR, CNS_LISTEN_ERROR, CNS_ACCEPT_ERROR,
  CNS_MEMORY_OVER_ERROR, CNS_CLIENT_INITIAL_ERROR = 201, CNS_CONNECT_ERROR
}
 

関数

D_EXTERN CmnNetSocketStatus CmnNetSocket_StartServer (unsigned short port, void(*serverMainProc)(CmnNetSocket *), CmnNetSocketServer *server)
 TCP/IP待ち受けサーバー起動 [詳解]
 
D_EXTERN CmnNetSocketStatus CmnNetSocket_EndServer (CmnNetSocketServer *server)
 サーバーを終了する [詳解]
 
D_EXTERN CmnNetSocketStatus CmnNetSocket_NoSessionRequest (const char *host, unsigned short port, CmnDataBuffer *request, CmnDataBuffer *response, const char *responseEndMark, const int responseEndMarkLen, int opt)
 セッションレスTCP/IPリクエスト送信 [詳解]
 
D_EXTERN CmnNetSocketStatus CmnNetSocket_ReceiveAll (CmnNetSocket *socket, CmnDataBuffer *buf, const char *endMark, const int endMarkLen)
 ソケットからすべてのデータを読み込む [詳解]
 
D_EXTERN CmnNetSocketStatus CmnNetSocket_SendAll (CmnNetSocket *socket, const void *data, int len)
 ソケットへすべてのデータを書き込む [詳解]
 
D_EXTERN CmnNetSocketStatus CmnNetSocket_ToSocketAddress (const char *host, unsigned short port, struct sockaddr_in *addr)
 IPアドレスやホスト名文字列とポート番号からsockaddr_inを設定する [詳解]
 
D_EXTERN CmnNetHttpResponseCmnNetHttp_GetRequest (const char *ip, unsigned short port, const char *path)
 HTTPのGETリクエストを送信する [詳解]
 
D_EXTERN CmnNetHttpResponseCmnNetHttp_PostRequest (const char *ip, unsigned short port, const char *path, CmnDataBuffer *requestBody)
 HTTPのPOSTリクエストを送信する [詳解]
 

詳解

ネットワークライブラリ ヘッダファイル

ネットワークライブラリのヘッダファイル。

著者
H.Kumagai
日付
2020-07-26

マクロ定義詳解

#define CNS_OPT_GRACEFUL_CLOSE   0x01

ソケットオプション:リクエスト送信後にFIN送信(送信側クローズ)を行う

型定義詳解

ソケットオブジェクト(ネイティブソケットのラッパー)

ソケット待ち受けサーバーオブジェクト

列挙型詳解

ソケットステータス

列挙値
CNS_SUCCESS 

正常

CNS_INPUT_ERROR 

I/Oエラー:INPUT

CNS_OUTPUT_ERROR 

I/Oエラー:OUTPUT

CNS_ADDRESS_ERROR 

IPアドレス変換エラー

CNS_SERVER_INITIAL_ERROR 

サーバーエラー:初期化

CNS_BIND_ERROR 

サーバーエラー:BIND

CNS_LISTEN_ERROR 

サーバーエラー:LISTEN

CNS_ACCEPT_ERROR 

サーバーエラー:ACCEPT

CNS_MEMORY_OVER_ERROR 

サーバーエラー:メモリ確保失敗

CNS_CLIENT_INITIAL_ERROR 

クライアントエラー:初期化

CNS_CONNECT_ERROR 

クライアントエラー:接続

関数詳解

D_EXTERN CmnNetHttpResponse* CmnNetHttp_GetRequest ( const char *  ip,
unsigned short  port,
const char *  path 
)

HTTPのGETリクエストを送信する

引数
ipリモートホストのIPアドレス
portリモートホストのポート
pathリクエストパス
戻り値
レスポンスデータ
D_EXTERN CmnNetHttpResponse* CmnNetHttp_PostRequest ( const char *  ip,
unsigned short  port,
const char *  path,
CmnDataBuffer requestBody 
)

HTTPのPOSTリクエストを送信する

引数
ipリモートホストのIPアドレス
portリモートホストのポート
pathリクエストパス
requestBodyリクエストボディに設定するデータ
戻り値
レスポンスデータ
D_EXTERN CmnNetSocketStatus CmnNetSocket_EndServer ( CmnNetSocketServer server)

サーバーを終了する

引数
serverサーバーオブジェクト
D_EXTERN 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を指定する。
responseEndMarkLenendMarkのバイト数
optソケットオプション(CNS_OPT_XXX を論理和で指定する)
戻り値
ステータス
D_EXTERN CmnNetSocketStatus CmnNetSocket_ReceiveAll ( CmnNetSocket socket,
CmnDataBuffer buf,
const char *  endMark,
const int  endMarkLen 
)

ソケットからすべてのデータを読み込む

受信データにendMarkが現れる、もしくは相手が送信終了(FIN送信、graceful close)するまでブロックして受信データを全て読み込む。

引数
socketSocket
buf受信したデータを格納するバッファ。endMarkも含めて全ての受信データを格納する。
endMark受信データの終わりを示すバイト列。相手の送信終了(graceful close)まで無制限に読み込み続ける場合はNULLを指定する。
endMarkLenendMarkのバイト数
戻り値
ステータス
D_EXTERN CmnNetSocketStatus CmnNetSocket_SendAll ( CmnNetSocket socket,
const void *  data,
int  len 
)

ソケットへすべてのデータを書き込む

引数
socketSocket
data送信するデータ
lendataのバイト数
戻り値
ステータス
D_EXTERN CmnNetSocketStatus CmnNetSocket_StartServer ( unsigned short  port,
void(*)(CmnNetSocket *)  serverMainProc,
CmnNetSocketServer server 
)

TCP/IP待ち受けサーバー起動

portにLISTENするサーバー処理を別スレッドで開始する。
待ち受け開始後、portにアクセスがあればmethodを新規スレッドでコールする。 待ち受けを終了する場合はCmnNetSocket_EndServerをコールすること。 待ち受けスレッドはserver->acceptThreadに格納される。

引数
port通信を待ち受けるポート
serverMainProcportにアクセスがあった場合に呼び出す処理
serverサーバー起動に成功した場合にサーバー情報を設定する。呼び出し側での初期化は不要。
戻り値
処理結果ステータス
D_EXTERN CmnNetSocketStatus CmnNetSocket_ToSocketAddress ( const char *  host,
unsigned short  port,
struct sockaddr_in *  addr 
)

IPアドレスやホスト名文字列とポート番号からsockaddr_inを設定する

引数
hostIPアドレスまたはホスト名の文字列
portポート番号
addr変換したIPアドレス情報を格納する
戻り値
ステータス(正常時:CNS_SUCCESS、変換エラー:CNS_ADDRESS_ERROR)