MCPcopy Create free account
hub / github.com/MaaXYZ/MaaFramework / init_tcp_socket

Method init_tcp_socket

source/AgentCommon/Transceiver.cpp:144–179  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

142}
143
144uint16_t Transceiver::init_tcp_socket(uint16_t port, bool bind)
145{
146 LogFunc << VAR(port) << VAR(bind);
147
148 is_tcp_ = true;
149
150 zmq_sock_ = zmq::socket_t(zmq_ctx_, zmq::socket_type::pair);
151
152 zmq_pollitem_send_ = zmq::pollitem_t(zmq_sock_.handle(), 0, ZMQ_POLLOUT, 0);
153 zmq_pollitem_recv_ = zmq::pollitem_t(zmq_sock_.handle(), 0, ZMQ_POLLIN, 0);
154
155 is_bound_ = bind;
156
157 if (is_bound_) {
158 // 如果 port 为 0,使用通配符让系统自动分配端口
159 std::string bind_addr = std::format("tcp://127.0.0.1:{}", port == 0 ? "*" : std::to_string(port));
160 zmq_sock_.bind(bind_addr);
161
162 // 获取实际绑定的端点
163 char endpoint[256] = { };
164 size_t endpoint_len = sizeof(endpoint);
165 zmq_getsockopt(zmq_sock_.handle(), ZMQ_LAST_ENDPOINT, endpoint, &endpoint_len);
166 ipc_addr_ = endpoint;
167
168 tcp_port_ = parse_port_from_endpoint(ipc_addr_);
169 LogInfo << "TCP socket bound" << VAR(ipc_addr_) << VAR(tcp_port_);
170 }
171 else {
172 ipc_addr_ = std::format("tcp://127.0.0.1:{}", port);
173 tcp_port_ = port;
174 zmq_sock_.connect(ipc_addr_);
175 LogInfo << "TCP socket connected" << VAR(ipc_addr_);
176 }
177
178 return tcp_port_;
179}
180
181bool Transceiver::should_fallback_to_tcp()
182{

Callers

nothing calls this directly

Calls 4

parse_port_from_endpointFunction · 0.85
handleMethod · 0.80
connectMethod · 0.65
bindMethod · 0.45

Tested by

no test coverage detected