Программирование на сокете - что происходит в вызове accept () - PullRequest
0 голосов
/ 27 марта 2012

У меня есть система, основанная на Freescale MPC5200B, под управлением VxWorks, которая имеет странную проблему.

Система имеет набор самопроверок, которые открывают сокет-сервер для всего мира. Существует некоторое программное обеспечение для ПК, которое открывает сокет на сервере для связи, и затем пользователь на ПК может запускать батареи тестов на карте.

Система также имеет загрузчик прошивки. Это работает противоположным образом - программное обеспечение ПК открывает сервер сокетов. и встроенный клиент подключается к нему, после чего ПК отправляет ему новое прикладное программное обеспечение, которое записывает встроенное программное обеспечение.

Теперь проблема: на 99% выпущенных карт это работает нормально. На некоторых картах загрузчик работает, но программа самотестирования не работает - микропрограмма вызывает accept () и никогда не возвращается, и никогда не видит, что ПК пытается открыть сокеты. Это последовательно - карты, которые не работают, не работают, а другие работают.

Вы могли бы сказать, что это не совсем программная проблема, и я бы согласился, но компания, которую я создал программное обеспечение, спрашивает меня: какое устройство выходит из строя, и что его нужно заменить? Если загрузчик работает, драйверы Ethernet и процессор работают.

Итак, теперь объяснение пройдено, и вот вопрос: что может завершиться ошибкой при вызове сокета «accept ()», который отличается от «connect ()» в противоположном направлении? Если accept (blocking) никогда не возвращается, что там происходит, что может указывать на проблему с «плохим» набором карт?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...