Это может произойти, если сокет все-таки открылся, но очень медленный. И запрос идет туда с очень мелкой скоростью - таймаут сокета тут не поможет(разве что очень маленький). Сталкивался с такой ситуацией.
Не работал с этой функций, но мне кажется что она выставляет таймаут на каждую операцию, а не на все. Соответственно подвиснет на ограниченное, но оч большое время про плохом коннекте.