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;
}