io_uring recvmsg test
parent
00ee6b7961
commit
6239f6748a
45
test.cpp
45
test.cpp
|
@ -13,6 +13,11 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <liburing.h>
|
#include <liburing.h>
|
||||||
|
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/epoll.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <deque>
|
#include <deque>
|
||||||
|
@ -208,7 +213,7 @@ int main1(int argc, char *argv[])
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main02(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
std::map<int, std::string> strs;
|
std::map<int, std::string> strs;
|
||||||
strs.emplace(12, "str");
|
strs.emplace(12, "str");
|
||||||
|
@ -231,3 +236,41 @@ int main(int argc, char *argv[])
|
||||||
io_uring_queue_exit(&ring);
|
io_uring_queue_exit(&ring);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int listen_fd = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
struct sockaddr_in bind_addr;
|
||||||
|
assert(inet_pton(AF_INET, "0.0.0.0", &bind_addr.sin_addr) == 1);
|
||||||
|
bind_addr.sin_family = AF_INET;
|
||||||
|
bind_addr.sin_port = 13892;
|
||||||
|
assert(bind(listen_fd, (sockaddr*)&bind_addr, sizeof(bind_addr)) == 0);
|
||||||
|
assert(listen(listen_fd, 128) == 0);
|
||||||
|
struct sockaddr_in peer_addr;
|
||||||
|
socklen_t peer_addr_size = sizeof(peer_addr);
|
||||||
|
int peer_fd = accept(listen_fd, (sockaddr*)&peer_addr, &peer_addr_size);
|
||||||
|
assert(peer_fd >= 0);
|
||||||
|
//fcntl(peer_fd, F_SETFL, fcntl(listen_fd, F_GETFL, 0) | O_NONBLOCK);
|
||||||
|
|
||||||
|
struct io_uring ring;
|
||||||
|
assert(setup_context(32, &ring) == 0);
|
||||||
|
void *buf = memalign(512, 4096*1024);
|
||||||
|
|
||||||
|
struct io_uring_sqe *sqe = io_uring_get_sqe(&ring);
|
||||||
|
assert(sqe);
|
||||||
|
struct iovec iov = { buf, 4096*1024 };
|
||||||
|
struct msghdr msg = { 0 };
|
||||||
|
msg.msg_iov = &iov;
|
||||||
|
msg.msg_iovlen = 1;
|
||||||
|
io_uring_prep_recvmsg(sqe, peer_fd, &msg, 0);
|
||||||
|
io_uring_sqe_set_data(sqe, buf);
|
||||||
|
io_uring_submit_and_wait(&ring, 1);
|
||||||
|
struct io_uring_cqe *cqe;
|
||||||
|
io_uring_peek_cqe(&ring, &cqe);
|
||||||
|
int ret = cqe->res;
|
||||||
|
printf("cqe result: %d\n", ret);
|
||||||
|
// ok, io_uring's sendmsg always reads as much data as is available and finishes
|
||||||
|
io_uring_cqe_seen(&ring, cqe);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue