2011-10-13 28 views
6

Tôi có một ổ cắm UDP đang nghe ở cổng truyền phát sóng và nó hoạt động tốt.Ổ cắm nghe UDP ngừng nghe sau khi thay đổi cấu hình mạng

Tuy nhiên, khi tôi ngủ đông và tiếp tục hệ điều hành (Windows 7), ổ cắm chỉ dừng dữ liệu receving (và tôi có thể thấy rằng có dữ liệu đến bằng Wireshark).

Điều này cũng xảy ra nếu tôi thay đổi bất kỳ cài đặt mạng nào như, thay đổi địa chỉ IP của tôi, tắt và bật bộ điều hợp mạng.

Hệ điều hành dường như vô hiệu hóa tất cả các bộ điều hợp mạng khi ngủ đông và bật lại chúng khi được tiếp tục.

select chỉ trả về 0 (thời gian chờ) không khác gì khi tôi không nhận được bất kỳ dữ liệu nào. Tôi không thể tìm thấy bất kỳ tham chiếu nào đến hành vi này ở bất kỳ đâu.

Nếu tôi đóng ổ cắm và tạo lại ổ cắm, nó sẽ bắt đầu hoạt động trở lại.

Ổ cắm nghe TCP của tôi vẫn hoạt động tốt sau khi tiếp tục hệ điều hành.

Bất kỳ ý tưởng nào về cách phát hiện và khắc phục tình huống này?

CHỈNH SỬA: Nó vẫn nhận được trực tiếp địa chỉ dữ liệu tốt, nó không nhận được truyền brodcast nữa.

EDIT2: Chỉ cần phát hiện ra rằng nếu tôi viết thư cho các ổ cắm (gửi một gói tin giả để bất cứ nơi nào) nó bắt đầu hoạt động trở lại ...

+0

bạn có thể muốn thêm (các) thẻ với các phiên bản cửa sổ có liên quan – jgauffin

+0

địa chỉ ổ cắm bị ràng buộc là gì? – User

Trả lời

1

Tôi nghĩ rằng mã của bạn không liên kết một cách rõ ràng các ổ cắm để "0.0 .0.0 "địa chỉ. Vì vậy, khi bạn gửi nó liên kết IP giao diện có sẵn tại thời điểm đó. Khi IP này được thay đổi hoặc giao diện bị vô hiệu hóa, socket này sẽ được thiết lập lại bởi ngăn xếp TCP/IP. Trong ổ cắm TCP của bạn, bạn nên có ràng buộc với "0.0.0.0" địa chỉ để nó sẽ luôn luôn lắng nghe cho kết nối độc lập của bất kỳ thay đổi IP/giao diện. Bạn có thể làm cho ổ cắm udp của bạn cũng bị ràng buộc để "0.0.0.0" trước khi gửi bất kỳ dữ liệu trên nó. Điều này sẽ làm cho nó hoạt động ngay cả sau khi ngủ đông hoặc thay đổi IP.

Các vấn đề liên quan