JavaScript is not currently enabled, but is required for full CodeSonar manual search and browse functionality.
If you are viewing this file in your hub's Web GUI, enable JavaScript in your browser: you will also need it for GUI functionality.
If you opened this file directly from disk, your browser may be directly suppressing JavaScript functionality: certain browsers perform this suppression on local files (but not files delivered by web servers) for security reasons.
| CodeSonar® 9.2p0 | CONFIDENTIAL | CodeSecure Inc |
ソケット操作が、その操作に対して適切ではない状態で実行されています。
| クラス名 | Socket In Wrong State | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 日本語クラス名 | 不適切な状態でのソケット操作 | ||||||||||||||||||
| クラス分類 | 信頼性 (reliability) | ||||||||||||||||||
| ニーモニック | IO.SOCK.STATE | ||||||||||||||||||
| カテゴリー |
|
||||||||||||||||||
| 対応言語 | C および C++ で利用可能です。 |
||||||||||||||||||
| 有効/無効設定 | このワーニングクラスのチェックはデフォルトで無効になっています。チェックを有効にするにはプロジェクト設定ファイル
(configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += allow class="Socket In Wrong State" |
#include <sys/socket.h>
#include <unistd.h>
int listen_no_bind(void){
int sock = socket(PF_LOCAL, SOCK_STREAM, 0);
struct sockaddr a;
socklen_t alen = sizeof(struct sockaddr);
int res;
if (sock < 0 ) return -1;
res = listen(sock, SOMAXCONN); /* 'Socket In Wrong State' warning issued here
* - socket has not been bound
*/
close(sock);
return res;
}
int listen_after_bind(void){
int sock = socket(PF_LOCAL, SOCK_STREAM, 0);
struct sockaddr a;
socklen_t alen = sizeof(struct sockaddr);
int res;
if (sock < 0 ) return -1;
res = bind(sock, &a, alen);
if (res >= 0){
res = listen(sock, SOMAXCONN); /* ok: socket has been bound with bind() */
}
close(sock);
return res;
}
| ワーニングを引き起こす関数 | ワーニングが引き起こされる時 |
|---|---|
| int accept(int s, struct sockaddr *addr, socklen_t *addrlen) | ソケットが listen() により listen 状態となっていない場合 |
| int bind(int sockfd, void *my_addr, int addrlen); | ソケットの sockfd が socket() によって初期化されていない場合 |
| int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen) | ソケットの sockfd が既に (listen() 呼び出しにより) listen 状態となっている場合 |
| int listen(int sockfd, int backlog); | ソケット sockfd が bind() により bind 状態となっていない場合 |
| int recv(int sockfd, void *buf, size_t len, int flags) | ソケット sockfd が connect() により connect 状態となっていない場合 |
| int send(int s, const void *msg, size_t len, int flags) | ソケット sockfd が connect() により connect 状態となっていない場合 |
設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。
To report problems with this documentation, please visit https://support.codesecure.com/.