Linux知识点 -- 回调函数类型
文章目录
- [Linux知识点 -- 回调函数类型](#Linux知识点 -- 回调函数类型)
1.
cpp
#include <functional>
typedef std::function<void (int, const std::string&, const uint16_t&, const std::string&)> func_t;
static void service(int sock, const std::string &cli_ip,
const uint16_t &cli_port, const std::string &thread_name)
{
// 读取消息:TCP流式套接字可以直接使用read和write接口(recvfrom专用于UDP数据报读取)
char buffer[1024];
while (true)
{
ssize_t s = read(sock, buffer, sizeof(buffer - 1));
if (s > 0)
{
buffer[s] = 0;
std::cout << thread_name << "|" << cli_ip << ":" << cli_port << "# " << buffer << std::endl;
}
else if (s == 0) // 对端关闭连接
{
logMessage(NORMAL, "%s:%d shutdown, me too!", cli_ip.c_str(), cli_port);
break;
}
else
{
logMessage(ERROR, "read sock error, %d:%s", errno, strerror(errno));
break;
}
write(sock, buffer, strlen(buffer));
}
close(sock); // 线程在回调函数中关闭不用的文件描述符
}
int main()
{
func_t func = service;
int sock;
std::string ip;
uint16_t port;
std::string name;
//...初始化参数
func(sock, ip, port, name);
return 0;
}
2.
与上面的写法是等价的;
cpp
#include <functional>
using func_t = std::function<void (int, const std::string&, const uint16_t&, const std::string&)>;
3.bind绑定参数
见Reactor服务器
cpp