BSD Socket をテスト中
lwip をユーザープロセスで起動しメッセージパッシング経由で BSD Socket を提供する事に。
今のところ通っているテストは以下のみ。
errno = 0; EXPECT_EQ(-1, send(-1, NULL, 0, 0)); EXPECT_EQ(EBADF, errno);
send の実装は lwip (net_server) にメッセージで処理を丸投げするだけ。地味に errno の設定も。
int send(int sockfd, void* buf, size_t len, int flags) { uintptr_t id = monapi_get_server_thread_id(ID_NET_SERVER); if (Message::send(id, MSG_NET_SOCKET_SEND, sockfd, len, flags) != M_OK) { return EBADF; } if (Message::sendBuffer(id, buf, len) != M_OK) { return EBADF; } MessageInfo src; MessageInfo dst; src.from = id; src.header = MSG_RESULT_OK; src.arg1 = MSG_NET_SOCKET_SEND; if (Message::receive(&dst, &src, Message::equalsFromHeaderArg1) != M_OK) { return EBADF; } errno = dst.arg3; return dst.arg2; }