int func(boost::asio::ip::tcp::socket &socket)
{
boost::system::error_code ec;
socket.write_some(boost::asio::buffer("hello world!"), ec);
cout << socket.is_open() << endl;
if(ec)
{
cout << boost::system::system_error(ec).what() << endl;
}
return 0;
}
int main(int argc, char* argv[])
{
using namespace boost::asio;
io_service iosev;
ip::tcp::acceptor acceptor(iosev, ip::tcp::endpoint(ip::tcp::v4(), 1000));
while(1)
{
ip::tcp::socket socket(iosev);
acceptor.accept(socket);
boost::thread t = boost::thread(func, boost::ref(socket));
}
return 0;
}
Tôi muốn một chủ đề mới xử lý kết nối mới. Nhưng trong chức năng "func", ổ cắm không mở và tôi nhận được "Bad descriptor". Tôi đọc một số ví dụ trong tài liệu và web, nhưng chúng không đồng bộ. Tôi nghĩ rằng nó không cần thiết cho nhu cầu đơn giản của tôi.Có "Bộ mô tả tập tin sai" khi sử dụng tăng :: asio và boost :: thread
Làm cách nào để khắc phục lỗi? Bất kỳ trợ giúp nào đều được đánh giá cao
Có thể điều này xảy ra vì chuỗi chính thực hiện chấp nhận (socket) cùng một lúc, vì một luồng khác cố gắng làm việc với socket. Đi qua tham chiếu, bạn đang làm việc với cùng một cá thể socket. –
@AlexFarber Tôi không nghĩ vậy. Bởi vì tôi chỉ sử dụng một máy khách để kết nối máy chủ, nên chỉ có một kết nối. – leezii
Nhưng đồng thời, khi một khách hàng cố gắng làm việc với socket, chủ đề chính áp dụng toán tử chấp nhận cho cùng một socket. –