シャットダウンに関する UNIX の man ページには、次のように記載されています。
戻り値:
成功すると、ゼロが返されます。エラーの場合は -1 が返され、errno が適切に設定されます。
エラー:
EBADF - sockfd は有効な記述子ではありません。
ENOTCONN - 指定されたソケットが接続されていません。
ENOTSOCK - sockfd はソケットではなくファイルです。
また、Windows プラットフォームもまったく同じです。
戻り値
エラーが発生しない場合、shutdown は 0 を返します。それ以外の場合は、SOCKET_ERROR の値が返され、WSAGetLastError を呼び出すことによって特定のエラー コードを取得できます。
つまり、UDP は接続指向のプロトコルではなく、そのための connect() 呼び出しは、関連付けがまったく確立されていることを意味するものではありません。
私の推測では、実際には ENOTCONN エラー (Windows の場合は WSAENOTCONN) が発生しています。errno (または Windows の場合は WSAGetLastError()) を確認してください。