-
Notifications
You must be signed in to change notification settings - Fork 133
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
28 changed files
with
3,575 additions
and
3,983 deletions.
There are no files selected for viewing
1,088 changes: 573 additions & 515 deletions
1,088
build/CMakeFiles/3.22.1/CompilerIdC/CMakeCCompilerId.c
Large diffs are not rendered by default.
Oops, something went wrong.
1,038 changes: 547 additions & 491 deletions
1,038
build/CMakeFiles/3.22.1/CompilerIdCXX/CMakeCXXCompilerId.cpp
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,105 +1,87 @@ | ||
#include <unistd.h> | ||
#include <iostream> | ||
#include <sys/types.h> | ||
#include <sys/socket.h> | ||
#include <arpa/inet.h> | ||
#include <fcntl.h> | ||
#include <stack> | ||
#include <string.h> | ||
#include <sys/socket.h> | ||
#include <sys/types.h> | ||
#include <unistd.h> | ||
#include <iostream> | ||
#include <stack> | ||
#include "monsoon.h" | ||
|
||
static int listen_sock = -1; | ||
|
||
void test_accept(); | ||
|
||
// task | ||
void watch_io_read() | ||
{ | ||
monsoon::IOManager::GetThis()->addEvent(listen_sock, monsoon::READ, test_accept); | ||
} | ||
void watch_io_read() { monsoon::IOManager::GetThis()->addEvent(listen_sock, monsoon::READ, test_accept); } | ||
|
||
void test_accept() | ||
{ | ||
struct sockaddr_in addr; | ||
memset(&addr, 0, sizeof(addr)); | ||
socklen_t len = sizeof(addr); | ||
int fd = accept(listen_sock, (struct sockaddr *)&addr, &len); | ||
if (fd < 0) | ||
{ | ||
std::cout << "fd = " << fd << ",accept error" << std::endl; | ||
} | ||
else | ||
{ | ||
std::cout << "fd = " << fd << ",accept success" << std::endl; | ||
fcntl(fd, F_SETFL, O_NONBLOCK); | ||
monsoon::IOManager::GetThis()->addEvent( | ||
fd, monsoon::READ, [fd]() | ||
{ | ||
char buffer[1024]; | ||
memset(buffer,0,sizeof(buffer)); | ||
while(true) | ||
{ | ||
int ret = recv(fd,buffer,sizeof(buffer),0); | ||
if(ret >0) | ||
{ | ||
std::cout<<"client say: "<<buffer<<std::endl; | ||
ret = send(fd,buffer,ret,0); | ||
} | ||
if(ret <= 0) | ||
{ | ||
if(errno == EAGAIN)continue; | ||
close(fd); | ||
break; | ||
} | ||
} }); | ||
} | ||
monsoon::IOManager::GetThis()->scheduler(watch_io_read); | ||
void test_accept() { | ||
struct sockaddr_in addr; | ||
memset(&addr, 0, sizeof(addr)); | ||
socklen_t len = sizeof(addr); | ||
int fd = accept(listen_sock, (struct sockaddr *)&addr, &len); | ||
if (fd < 0) { | ||
std::cout << "fd = " << fd << ",accept error" << std::endl; | ||
} else { | ||
std::cout << "fd = " << fd << ",accept success" << std::endl; | ||
fcntl(fd, F_SETFL, O_NONBLOCK); | ||
monsoon::IOManager::GetThis()->addEvent(fd, monsoon::READ, [fd]() { | ||
char buffer[1024]; | ||
memset(buffer, 0, sizeof(buffer)); | ||
while (true) { | ||
int ret = recv(fd, buffer, sizeof(buffer), 0); | ||
if (ret > 0) { | ||
std::cout << "client say: " << buffer << std::endl; | ||
ret = send(fd, buffer, ret, 0); | ||
} | ||
if (ret <= 0) { | ||
if (errno == EAGAIN) continue; | ||
close(fd); | ||
break; | ||
} | ||
} | ||
}); | ||
} | ||
monsoon::IOManager::GetThis()->scheduler(watch_io_read); | ||
} | ||
|
||
void test_iomanager() | ||
{ | ||
int port = 8080; | ||
struct sockaddr_in svr_addr; | ||
// socklen_t cli_len = sizeof(cli_addr); | ||
listen_sock = socket(AF_INET, SOCK_STREAM, 0); | ||
if (listen_sock < 0) | ||
{ | ||
std::cout << "creating listen socket error" << std::endl; | ||
return; | ||
} | ||
void test_iomanager() { | ||
int port = 8080; | ||
struct sockaddr_in svr_addr; | ||
// socklen_t cli_len = sizeof(cli_addr); | ||
listen_sock = socket(AF_INET, SOCK_STREAM, 0); | ||
if (listen_sock < 0) { | ||
std::cout << "creating listen socket error" << std::endl; | ||
return; | ||
} | ||
|
||
int opt = 1; | ||
setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); | ||
int opt = 1; | ||
setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); | ||
|
||
memset((char *)&svr_addr, 0, sizeof(svr_addr)); | ||
svr_addr.sin_family = AF_INET; | ||
svr_addr.sin_port = htons(port); | ||
svr_addr.sin_addr.s_addr = INADDR_ANY; | ||
memset((char *)&svr_addr, 0, sizeof(svr_addr)); | ||
svr_addr.sin_family = AF_INET; | ||
svr_addr.sin_port = htons(port); | ||
svr_addr.sin_addr.s_addr = INADDR_ANY; | ||
|
||
if (bind(listen_sock, (struct sockaddr *)&svr_addr, sizeof(svr_addr)) < 0) | ||
{ | ||
std::cout << "bind error" << std::endl; | ||
return; | ||
} | ||
if (bind(listen_sock, (struct sockaddr *)&svr_addr, sizeof(svr_addr)) < 0) { | ||
std::cout << "bind error" << std::endl; | ||
return; | ||
} | ||
|
||
if (listen(listen_sock, 1024) < 0) | ||
{ | ||
std::cout << "listen error" << std::endl; | ||
return; | ||
} | ||
else | ||
{ | ||
std::cout << "listen success on port: " << port << std::endl; | ||
} | ||
if (listen(listen_sock, 1024) < 0) { | ||
std::cout << "listen error" << std::endl; | ||
return; | ||
} else { | ||
std::cout << "listen success on port: " << port << std::endl; | ||
} | ||
|
||
fcntl(listen_sock, F_SETFL, O_NONBLOCK); | ||
fcntl(listen_sock, F_SETFL, O_NONBLOCK); | ||
|
||
monsoon::IOManager iomanager; | ||
iomanager.addEvent(listen_sock, monsoon::READ, test_accept); | ||
monsoon::IOManager iomanager; | ||
iomanager.addEvent(listen_sock, monsoon::READ, test_accept); | ||
} | ||
|
||
int main(int argc, char *argv[]) | ||
{ | ||
test_iomanager(); | ||
return 0; | ||
int main(int argc, char *argv[]) { | ||
test_iomanager(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,89 +1,77 @@ | ||
#include "monsoon.h" | ||
#include <unistd.h> | ||
#include <sys/types.h> | ||
#include <sys/socket.h> | ||
#include <arpa/inet.h> | ||
#include <fcntl.h> | ||
#include <sys/socket.h> | ||
#include <sys/types.h> | ||
#include <unistd.h> | ||
#include "monsoon.h" | ||
|
||
const std::string LOG_HEAD = "[TASK] "; | ||
|
||
void test_sleep() | ||
{ | ||
std::cout << LOG_HEAD << "tid = " << monsoon::GetThreadId() << ",test_fiber_sleep begin" << std::endl; | ||
monsoon::IOManager iom(1, true); | ||
|
||
iom.scheduler( | ||
[] | ||
{ | ||
while (1) | ||
{ | ||
sleep(6); | ||
std::cout << "task 1 sleep for 6s" << std::endl; | ||
} | ||
}); | ||
|
||
iom.scheduler( | ||
[] | ||
{ | ||
while (1) | ||
{ | ||
sleep(2); | ||
std::cout << "task2 sleep for 2s" << std::endl; | ||
} | ||
}); | ||
|
||
std::cout << LOG_HEAD << "tid = " << monsoon::GetThreadId() << ",test_fiber_sleep finish" << std::endl; | ||
void test_sleep() { | ||
std::cout << LOG_HEAD << "tid = " << monsoon::GetThreadId() << ",test_fiber_sleep begin" << std::endl; | ||
monsoon::IOManager iom(1, true); | ||
|
||
iom.scheduler([] { | ||
while (1) { | ||
sleep(6); | ||
std::cout << "task 1 sleep for 6s" << std::endl; | ||
} | ||
}); | ||
|
||
iom.scheduler([] { | ||
while (1) { | ||
sleep(2); | ||
std::cout << "task2 sleep for 2s" << std::endl; | ||
} | ||
}); | ||
|
||
std::cout << LOG_HEAD << "tid = " << monsoon::GetThreadId() << ",test_fiber_sleep finish" << std::endl; | ||
} | ||
|
||
void test_sock() | ||
{ | ||
int sock = socket(AF_INET, SOCK_STREAM, 0); | ||
void test_sock() { | ||
int sock = socket(AF_INET, SOCK_STREAM, 0); | ||
|
||
sockaddr_in addr; | ||
memset(&addr, 0, sizeof(addr)); | ||
addr.sin_family = AF_INET; | ||
addr.sin_port = htons(80); | ||
inet_pton(AF_INET, "36.152.44.96", &addr.sin_addr.s_addr); | ||
sockaddr_in addr; | ||
memset(&addr, 0, sizeof(addr)); | ||
addr.sin_family = AF_INET; | ||
addr.sin_port = htons(80); | ||
inet_pton(AF_INET, "36.152.44.96", &addr.sin_addr.s_addr); | ||
|
||
std::cout << "begin connect" << std::endl; | ||
int rt = connect(sock, (const sockaddr *)&addr, sizeof(addr)); | ||
std::cout << "connect rt=" << rt << " errno=" << errno << std::endl; | ||
std::cout << "begin connect" << std::endl; | ||
int rt = connect(sock, (const sockaddr *)&addr, sizeof(addr)); | ||
std::cout << "connect rt=" << rt << " errno=" << errno << std::endl; | ||
|
||
if (rt) | ||
{ | ||
return; | ||
} | ||
if (rt) { | ||
return; | ||
} | ||
|
||
const char data[] = "GET / HTTP/1.0\r\n\r\n"; | ||
rt = send(sock, data, sizeof(data), 0); | ||
std::cout << "send rt=" << rt << " errno=" << errno << std::endl; | ||
const char data[] = "GET / HTTP/1.0\r\n\r\n"; | ||
rt = send(sock, data, sizeof(data), 0); | ||
std::cout << "send rt=" << rt << " errno=" << errno << std::endl; | ||
|
||
if (rt <= 0) | ||
{ | ||
return; | ||
} | ||
if (rt <= 0) { | ||
return; | ||
} | ||
|
||
std::string buff; | ||
buff.resize(4096); | ||
std::string buff; | ||
buff.resize(4096); | ||
|
||
rt = recv(sock, &buff[0], buff.size(), 0); | ||
std::cout << "recv rt=" << rt << " errno=" << errno << std::endl; | ||
rt = recv(sock, &buff[0], buff.size(), 0); | ||
std::cout << "recv rt=" << rt << " errno=" << errno << std::endl; | ||
|
||
if (rt <= 0) | ||
{ | ||
return; | ||
} | ||
if (rt <= 0) { | ||
return; | ||
} | ||
|
||
buff.resize(rt); | ||
std::cout << "--------------------------------" << std::endl; | ||
std::cout << buff << std::endl; | ||
std::cout << "--------------------------------" << std::endl; | ||
buff.resize(rt); | ||
std::cout << "--------------------------------" << std::endl; | ||
std::cout << buff << std::endl; | ||
std::cout << "--------------------------------" << std::endl; | ||
} | ||
|
||
int main() | ||
{ | ||
// monsoon::IOManager iom; | ||
// iom.scheduler(test_sock); | ||
int main() { | ||
// monsoon::IOManager iom; | ||
// iom.scheduler(test_sock); | ||
|
||
test_sleep(); | ||
test_sleep(); | ||
} |
Oops, something went wrong.