Tôi đã viết chương trình này có một chức năng chính, trong đó, tôi đang tạo ra hai ổ cắm, như thế này:Sử dụng Tự động và Lambda để xử lý tín hiệu?
int sockfd1 = socket(AF_INET, SOCK_STREAM, 0);
int sockfd2 = socket(AF_INET, SOCK_STREAM, 0);
Bây giờ tôi làm một số thứ với họ, và khi người dùng nhấn tổ hợp phím Ctrl + C để chấm dứt quá trình này, tôi muốn chắc chắn rằng các ổ cắm đóng đúng cách, vì vậy tôi làm điều này:
auto sigTermHandler = [&] (int param) { close(sockfd1); close(sockfd2); };
signal(SIGTERM, sigTermHandler);
Nhưng điều này ném lỗi biên dịch sau khi biên dịch như g++ -std=gnu++0x <filename>.cpp
:
error: cannot convert ‘main(int, char**)::<lambda(int)>’ to ‘__sighandler_t {aka void (*)(int)}’ for argument ‘2’ to ‘void (* signal(int, __sighandler_t))(int)’
Không thể sử dụng lambda theo cách này để xử lý tín hiệu? Xin cho biết.
P.S. Tôi biết tôi có thể đặt nó trong một destructor, nếu tôi đã làm đúng OOP, nhưng tôi tò mò để xem nếu điều này hoạt động.