最近一台新機器發生, non-blocking socket connect return -1 , 當我check errno時候,本應該是 'EINPROGRESS' , 但是始終 errno is 0 !!

由於公司開發是屬於software dev,只持有 vendor 提供的 toolchain ...
很多設定檔案看不到...debug真的每次都很困難...只要新機器的設定環境初始跟以前不同,
或者沒有開啟所需的功能..我根本不知道...唯一知道的是"為什麼 service 不能跑 !!!"

於是開始瞎子摸象...查了一天發現是 應該vendor build uClibc 時候沒有開啟某項flag!!!!!

問題如下: 用個測試程式來跑看看!!
可以看到 main function , errno 都是正常的!
一旦pthread_create()  , 進入thread_func 時候 , errno 就會是 nil !!!
<<< MAIN SECTION connect part 1 start >>>
<< Error: Connect port Failed (2047),errno (150)
<< Error: check errno (150)
<<< server connect ok (2047)! >>>
<<< MAIN SECTION connect part 1 end  >>>

main thread errno pointer 0x96
main thread errno pointer@value 0
<<< THREAD SECTION ON >>>
check errno pointer (nil) and value 0
input main errno pointer@value 4 in Thread
<< Error: Connect port Failed (2048),errno (0)
<< Error: check errno (0)
<<< server connect failed (2048)! >>>
input main errno pointer@value 150 in Thread
<<< THREAD SECTION END  >>>

<<< MAIN SECTION connect part 2 start >>>
<< Error: Connect port Failed (2048),errno (150)
<< Error: check errno (150)
<<< server connect ok (2048)! >>>
<<< MAIN SECTION connect part 2 end  >>>



How to check :
只能去看一下vendor提供的toolchain檔案
查看一下 usr/include/bits/uClibc_config.h

 90 #undef __UCLIBC_HAS_THREADS_NATIVE__
 91 #define __UCLIBC_HAS_THREADS__ 1



因此得請vendor重新 build uClibc libaray!
行之有年的問題...再做新機器時候也得注意一下...


REF:
uclibc-has-threads-is-not-defined
connect error 0 running on ARM platform
Re: errno is not thread-safe in uClibc-0.9.30?
errno thread-safe